name: Mark stale issues

on:
  schedule:
    - cron: '0 8 * * *'
  workflow_dispatch:
  issue_comment:

env:
  stale_label: stale

jobs:
  stale_action:
    if: github.event_name != 'issue_comment'
    runs-on: ubuntu-latest
    permissions:
      issues: write

    steps:
      - uses: actions/stale@v9.0.0
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          days-before-stale: 30
          days-before-close: 5
          stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Please comment or update this issue or it will be closed in 5 days.'
          stale-issue-label: '${{ env.stale_label }}'
          exempt-issue-labels: 'Internal, Fixed in next release, Bug: Confirmed, Documentation Needed'
          exempt-all-issue-assignees: true
          operations-per-run: 300
          close-issue-reason: 'not_planned'

  remove_stale:
    # trigger "stale" removal immediately when stale issues are commented on
    # we need to explicitly check that the trigger does not run on comment on a PR as
    # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issue_comment-on-issues-only-or-pull-requests-only
    if: ${{ !github.event.issue.pull_request && github.event_name != 'schedule' }}
    permissions:
      contents: read #  for actions/checkout
      issues: write #  to edit issues label
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4.2.1
      - name: Remove 'stale' label
        run: gh issue edit ${{ github.event.issue.number }} --remove-label ${{ env.stale_label }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}