#
# 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.
#

#
# Pull Request Labeler GitHub Action Configuration: https://github.com/marketplace/actions/labeler

'Area - Batch Ingestion':
  - changed-files:
    - any-glob-to-any-file:
      - 'indexing-hadoop/**'
      - 'extensions-core/multi-stage-query/**'

'Area - Dependencies':
  - changed-files:
    - any-glob-to-any-file:
      - '**/pom.xml'
      - 'licenses.yaml'

'Area - Documentation':
  - changed-files:
    - any-glob-to-any-file:
      - 'docs/**/*'
      - 'website/**'
      - 'examples/quickstart/jupyter-notebooks/**'

'Area - Ingestion':
  - changed-files:
    - any-glob-to-any-file:
      - 'indexing-service/**'

'Area - Lookups':
  - changed-files:
    - any-glob-to-any-file:
      - 'extensions-core/lookups-cached-global/**'
      - 'extensions-core/lookups-cached-single/**'
      - 'extensions-core/kafka-extraction-namespace/**'

'Area - Metrics/Event Emitting':
  - changed-files:
    - any-glob-to-any-file:
      - 'processing/src/main/java/org/apache/druid/java/util/metrics/**'
      - 'processing/src/main/java/org/apache/druid/java/util/emitter/**'
      - 'extensions-contrib/*-emitter/**'

'Area - MSQ':
  - changed-files:
    - any-glob-to-any-file:
      - 'extensions-core/multi-stage-query/**'

'Area - Querying':
  - changed-files:
    - any-glob-to-any-file:
      - 'sql/**'
      - 'extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/sql/**'

'Area - Segment Format and Ser/De':
  - changed-files:
    - any-glob-to-any-file:
      - 'processing/src/main/java/org/apache/druid/segment/**'

'Area - Streaming Ingestion':
  - changed-files:
    - any-glob-to-any-file:
      - 'extensions-core/kafka-indexing-service/**'
      - 'extensions-core/kinesis-indexing-service/**'

'Area - Web Console':
  - changed-files:
    - any-glob-to-any-file:
      - 'web-console/**'

'Kubernetes':
  - changed-files:
    - any-glob-to-any-file:
      - 'extensions-contrib/kubernetes-overlord-extensions/**'

'GHA':
  - changed-files:
      - any-glob-to-any-file:
          - '.github/**'
