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

# Configuration for probot-stale - https://github.com/probot/stale

exemptMilestones: true
exemptProjects: true
exemptAssignees: true

# Label applied when closing
staleLabel: stale

# Configuration settings that are specific to just 'issues' or 'pulls':
pulls:
  daysUntilStale: 60
  daysUntilClose: 28
  limitPerRun: 5
  markComment: >
    This pull request has been marked as stale due to 60 days of inactivity.
    It will be closed in 4 weeks if no further activity occurs. If you think
    that's incorrect or this pull request should instead be reviewed, please simply
    write any comment. Even if closed, you can still revive the PR at any time or
    discuss it on the dev@druid.apache.org list.
    Thank you for your contributions.
  unmarkComment: >
    This pull request/issue is no longer marked as stale.
  closeComment: >
    This pull request/issue has been closed due to lack of activity. If you think that
    is incorrect, or the pull request requires review, you can revive the PR at any time.

  # Unlike for issues, there are no exempt labels for PRs, apart from "Evergreen". This is
  # to foster PR authors to complete their work.

issues:
  daysUntilStale: 280
  daysUntilClose: 28
  limitPerRun: 5
  markComment: >
    This issue has been marked as stale due to 280 days of inactivity.
    It will be closed in 4 weeks if no further activity occurs. If this issue is still
    relevant, please simply write any comment. Even if closed, you can still revive the
    issue at any time or discuss it on the dev@druid.apache.org list.
    Thank you for your contributions.
  unmarkComment: >
    This issue is no longer marked as stale.
  closeComment: >
    This issue has been closed due to lack of activity. If you think that
    is incorrect, or the issue requires additional review, you can revive the issue at
    any time.

  # Issues with these labels will never be considered stale.
  # There are almost all labels listed here, except:
  # Backport
  # Difficulty - *: not used these days, old issues should be revised
  # Discuss
  # duplicate
  # Feature/Change Description
  # Feature
  # Flaky test: tests tend to become less flaky in time, so these issues should be revised
  # invalid
  # Priority - *: not used these days, old issues should be revised
  # Question
  # Release Notes
  # Uncategorized problem report: they tend to decline in importance with time
  # WIP
  # wontfix
  exemptLabels:
    - Security
    - Bug
    - Proposal
    - Design Review
    - Improvement
    - Performance
    - Refactoring
    - Apache
    - Area - Automation/Static Analysis
    - Area - Batch Indexing
    - Area - Cache
    - Area - Deep Storage
    - Area - Dependencies
    - Area - Dependency Injection
    - Area - Dev
    - Area - Documentation
    - Area - Extension
    - Area - Kafka/Kinesis Indexing
    - Area - Lookups
    - Area - Metadata
    - Area - Metrics/Event Emitting
    - Area - Null Handling
    - Area - Operations
    - Area - Query UI
    - Area - Querying
    - Area - Router
    - Area - Segment Balancing/Coordination
    - Area - Segment Format and Ser/De
    - Area - SQL
    - Area - Testing
    - Area - Web Console
    - Area - Zookeeper/Curator
    - Compatibility
    - Contributions Welcome
    - Development Blocker
    - Ease of Use
    - Error handling
    - HTTP
    - Incompatible
    - Stable API
