name: pr-closer on: schedule: - cron: "0 0 * * *" # daily at midnight workflow_dispatch: jobs: close-stale-prs: runs-on: ubuntu-latest permissions: pull-requests: write steps: - name: Close stale PRs env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh pr list -R "${{ github.repository }}" --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 | any(.conclusion == "FAILURE" or .conclusion == "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 "${{ github.repository }}" -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 "${{ github.repository }}" -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