name: Close inactive PRs

on:
  schedule:
    # Run daily. GitHub cron schedules use UTC.
    - cron: "30 1 * * *"
  workflow_dispatch:
    inputs:
      debug_only:
        description: "Dry run: log intended actions without changing PRs"
        required: false
        default: false
        type: boolean

permissions:
  issues: write
  pull-requests: write

concurrency:
  group: ${{ github.workflow }}
  cancel-in-progress: false

jobs:
  stale-prs:
    runs-on: ubuntu-latest
    steps:
      - name: Mark and close inactive PRs
        uses: actions/stale@v10
        with:
          days-before-issue-stale: -1
          days-before-issue-close: -1

          days-before-pr-stale: 365
          days-before-pr-close: 7

          stale-pr-label: pr:inactive
          close-pr-label: pr:auto-closed
          exempt-pr-labels: pr:keep-open

          stale-pr-message: >
            This PR has been inactive for 365 days. If there is no new activity
            within 7 days, it will be closed automatically. Comment, push new
            commits, or remove the pr:inactive label to keep it open. Add
            pr:keep-open to exempt it from future inactive PR cleanup.

          close-pr-message: >
            Closing this PR because it has had no activity for 7 days after
            being marked inactive. If this is still useful or ready to move
            forward, feel free to reopen it with fresh context or updated
            details. Sorry for any inconvenience.

          remove-pr-stale-when-updated: true
          delete-branch: false
          operations-per-run: 100
          debug-only: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_only || false }}
