#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

INFRA:
  - changed-files:
    - any-glob-to-any-file: [
     '.github/**/*',
     'tools/**/*',
     'dev/create-release/**/*',
     '.asf.yaml',
     '.gitattributes',
     '.gitignore',
     'dev/merge_spark_pr.py',
     'dev/run-tests-jenkins*'
    ]

BUILD:
  - changed-files:
    - all-globs-to-any-file: [
     'dev/**/*',
     '!dev/merge_spark_pr.py',
     '!dev/run-tests-jenkins*'
    ]
    - any-glob-to-any-file: [
     'build/**/*',
     'project/**/*',
     'assembly/**/*',
     '**/*pom.xml',
     'bin/docker-image-tool.sh',
     'bin/find-spark-home*',
     'scalastyle-config.xml'
    ]

DOCS:
  - changed-files:
    - any-glob-to-any-file: [
     'docs/**/*',
     '**/README.md',
     '**/CONTRIBUTING.md',
     'python/docs/**/*'
    ]

EXAMPLES:
  - changed-files:
    - any-glob-to-any-file: [
     'examples/**/*',
     'bin/run-example*'
    ]

CORE:
  - changed-files:
    - all-globs-to-any-file: [
     'core/**/*',
     '!**/*UI.scala',
     '!**/ui/**/*'
    ]
    - any-glob-to-any-file: [
     'common/kvstore/**/*',
     'common/network-common/**/*',
     'common/network-shuffle/**/*',
     'python/pyspark/*.py',
     'python/pyspark/tests/**/*.py'
    ]

SPARK SUBMIT:
  - changed-files:
    - any-glob-to-any-file: [
     'bin/spark-submit*'
    ]

SPARK SHELL:
  - changed-files:
    - any-glob-to-any-file: [
     'repl/**/*',
     'bin/spark-shell*'
    ]

SQL:
  - changed-files:
    - all-globs-to-any-file: [
     '**/sql/**/*',
     '!python/pyspark/sql/avro/**/*',
     '!python/pyspark/sql/streaming/**/*',
     '!python/pyspark/sql/tests/streaming/test_streaming*.py'
    ]
    - any-glob-to-any-file: [
     'common/unsafe/**/*',
     'common/sketch/**/*',
     'common/variant/**/*',
     'bin/spark-sql*',
     'bin/beeline*',
     'sbin/*thriftserver*.sh',
     '**/*SQL*.R',
     '**/DataFrame.R',
     '**/*WindowSpec.R',
     '**/*catalog.R',
     '**/*column.R',
     '**/*functions.R',
     '**/*group.R',
     '**/*schema.R',
     '**/*types.R'
    ]

AVRO:
  - changed-files:
    - any-glob-to-any-file: [
     'connector/avro/**/*',
     'python/pyspark/sql/avro/**/*'
    ]

DSTREAM:
  - changed-files:
    - any-glob-to-any-file: [
     'streaming/**/*',
     'data/streaming/**/*',
     'connector/kinesis-asl/**/*',
     'connector/kinesis-asl-assembly/**/*',
     'connector/kafka-0-10/**/*',
     'connector/kafka-0-10-assembly/**/*',
     'connector/kafka-0-10-token-provider/**/*',
     'python/pyspark/streaming/**/*'
    ]

GRAPHX:
  - changed-files:
    - any-glob-to-any-file: [
     'graphx/**/*',
     'data/graphx/**/*'
    ]

ML:
  - changed-files:
    - any-glob-to-any-file: [
     '**/ml/**/*',
     '**/*mllib_*.R'
    ]

MLLIB:
  - changed-files:
    - any-glob-to-any-file: [
     '**/spark/mllib/**/*',
     'mllib-local/**/*',
     'python/pyspark/mllib/**/*'
    ]

STRUCTURED STREAMING:
  - changed-files:
    - any-glob-to-any-file: [
     '**/sql/**/streaming/**/*',
     'connector/kafka-0-10-sql/**/*',
     'python/pyspark/sql/streaming/**/*',
     'python/pyspark/sql/tests/streaming/test_streaming*.py',
     '**/*streaming.R'
    ]

PYTHON:
  - changed-files:
    - any-glob-to-any-file: [
     'bin/pyspark*',
     '**/python/**/*'
    ]

PANDAS API ON SPARK:
  - changed-files:
    - any-glob-to-any-file: [
     'python/pyspark/pandas/**/*'
    ]

R:
  - changed-files:
    - any-glob-to-any-file: [
     '**/r/**/*',
     '**/R/**/*',
     'bin/sparkR*'
    ]

YARN:
  - changed-files:
    - any-glob-to-any-file: [
     'resource-managers/yarn/**/*'
    ]

KUBERNETES:
  - changed-files:
    - any-glob-to-any-file: [
     'resource-managers/kubernetes/**/*'
    ]

WINDOWS:
  - changed-files:
    - any-glob-to-any-file: [
     '**/*.cmd',
     'R/pkg/tests/fulltests/test_Windows.R'
    ]

WEB UI:
  - changed-files:
    - any-glob-to-any-file: [
     '**/ui/**/*',
     '**/*UI.scala'
    ]

DEPLOY:
  - changed-files:
    - any-glob-to-any-file: [
     'sbin/**/*'
    ]

CONNECT:
  - changed-files:
    - any-glob-to-any-file: [
     'connector/connect/**/*',
     'python/pyspark/sql/**/connect/**/*',
     'python/pyspark/ml/**/connect/**/*'
    ]

PROTOBUF:
  - changed-files:
    - any-glob-to-any-file: [
     'connector/protobuf/**/*',
     'python/pyspark/sql/protobuf/**/*'
    ]
