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@5f858e3efba33a5ca4407a664cc011ad407f2008 #v10.1.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, never-stale, Bug: Confirmed"
          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
    # 'issue_comment' triggers on issues AND PR comments
    # 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: Clone repository
        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 #v6.0.0
        with:
          persist-credentials: false
      - name: Remove 'stale' label
        run: gh issue edit ${{ github.event.issue.number }} --remove-label ${{ env.stale_label }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
