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