diff --git a/.github/workflows/stale-prs.yml b/.github/workflows/stale-prs.yml new file mode 100644 index 00000000..2c4dfb5f --- /dev/null +++ b/.github/workflows/stale-prs.yml @@ -0,0 +1,55 @@ +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 }}