Files
Chris F Ravenscroft e8951481c8 ci: add actions/stale workflow (#490)
Marks issues and pull requests stale after 60 days of inactivity and
closes them 14 days later. Any comment clears the stale label and
restarts the clock, so active discussions are never swept up.

Exempts pinned, security, blocked, help wanted and good first issue, and
anything assigned to a milestone. Runs oldest-first so the real backlog
is handled before recent items.


Claude-Session: https://claude.ai/code/session_014L5EoqGWsuZWr8fCVM6izP

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-13 16:19:12 -07:00

55 lines
1.8 KiB
YAML

name: stale
on:
schedule:
# Daily, off the hour to avoid GitHub's scheduling congestion at :00
- cron: '17 4 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v11
with:
days-before-stale: 60
days-before-close: 14
stale-issue-label: stale
stale-pr-label: stale
stale-issue-message: >
This issue has had no activity for 60 days and has been marked stale.
It will be closed in 14 days unless there is new activity. If it is
still relevant, a comment saying so is enough to keep it open.
stale-pr-message: >
This pull request has had no activity for 60 days and has been marked
stale. It will be closed in 14 days unless there is new activity. If
you intend to continue the work, a comment saying so is enough to keep
it open.
close-issue-message: >
Closing this issue after 14 days with no further activity. If it is
still relevant, please comment and it can be reopened.
close-pr-message: >
Closing this pull request after 14 days with no further activity.
Please comment if you would like to pick the work back up.
# Never touch anything deliberately kept open.
exempt-issue-labels: 'pinned,security,blocked,help wanted,good first issue'
exempt-pr-labels: 'pinned,security,blocked,dependencies'
exempt-all-milestones: true
# Restarts the clock when someone comments, so an active discussion is
# never swept up.
remove-stale-when-updated: true
# Oldest first, so the genuine backlog is handled before recent items.
ascending: true