From 86807addf4dfc29ef4f1fcb75f6f943ade713c4a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 20 Apr 2026 17:11:24 +0900 Subject: [PATCH] ci: close `maybe automated` label pull requests (#10165) Co-authored-by: Codex --- .github/workflows/issue-close-require.yml | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/.github/workflows/issue-close-require.yml b/.github/workflows/issue-close-require.yml index e1bdfcf04..48357e33e 100644 --- a/.github/workflows/issue-close-require.yml +++ b/.github/workflows/issue-close-require.yml @@ -3,6 +3,7 @@ name: Issue Close Require on: schedule: - cron: '0 0 * * *' + workflow_dispatch: jobs: close-issues: @@ -24,3 +25,41 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} labels: maybe automated inactive-day: 3 + + close-prs: + runs-on: ubuntu-latest + permissions: + issues: read # to query PRs by label via the issues API + pull-requests: write # to close pull requests + steps: + - name: maybe automated PRs + uses: actions/github-script@v8 + with: + script: | + const cutoff = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000) + + const issues = await github.paginate(github.rest.issues.listForRepo, { + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open', + labels: 'maybe automated', + per_page: 100, + }) + + const prs = issues.filter(issue => + issue.pull_request && new Date(issue.updated_at) <= cutoff + ) + + for (const pr of prs) { + console.log(`Closing PR #${pr.number}, last updated at ${pr.updated_at}`) + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pr.number, + state: 'closed', + }) + } + + if (prs.length === 0) { + console.log('No inactive maybe automated PRs found') + } -- 2.51.2