ci: add workflow to auto-close stale PRs

Closes PRs that have been inactive for 30+ days, aren't authored by jdx,
and don't have a "keep-open" label. Runs daily at midnight.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
jdx 2026-03-22 15:39:01 +00:00
parent 0cc0f19036
commit 2ff66f7d78
No known key found for this signature in database
GPG key ID: 584DADE86724B407
4 changed files with 6842 additions and 37709 deletions

29
.github/workflows/pr-closer.yml vendored Normal file
View file

@ -0,0 +1,29 @@
name: pr-closer
on:
schedule:
- cron: "0 0 * * *" # daily at midnight
workflow_dispatch:
jobs:
close-stale-prs:
runs-on: ubuntu-latest
steps:
- name: Close stale PRs
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh pr list -R jdx/mise-action --state open --json number,author,labels,updatedAt,statusCheckRollup --limit 100 | \
jq -r '.[] | select(
(.updatedAt | fromdateiso8601) < (now - 30*24*60*60) and
.author.login != "jdx" and
([.labels[].name] | index("keep-open") | not)
) | [.number, (if (.statusCheckRollup | length > 0) and ([.statusCheckRollup[].conclusion] | index("FAILURE") or index("failure")) then "failing" else "passing" end)] | @tsv' | \
while read -r pr status; do
echo "Closing PR #$pr (checks: $status)"
if [ "$status" = "failing" ]; then
gh pr close "$pr" -R jdx/mise-action -c "This PR has been open for more than 30 days without activity. Note: CI checks were failing, which may be why it wasn't reviewed. Feel free to reopen or create a new PR if you'd like to continue working on this."
else
gh pr close "$pr" -R jdx/mise-action -c "This PR has been open for more than 30 days without activity. Feel free to reopen or create a new PR if you'd like to continue working on this."
fi
done