From 7dd27bf53e48cf2bc2e518b8cefa63ff676515cf Mon Sep 17 00:00:00 2001 From: Neeru <161798182+neeru24@users.noreply.github.com> Date: Thu, 15 Jan 2026 08:13:00 +0530 Subject: [PATCH] Create auto-close-mentioned-issues.yml --- .../workflows/auto-close-mentioned-issues.yml | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/auto-close-mentioned-issues.yml diff --git a/.github/workflows/auto-close-mentioned-issues.yml b/.github/workflows/auto-close-mentioned-issues.yml new file mode 100644 index 0000000..e1ec21c --- /dev/null +++ b/.github/workflows/auto-close-mentioned-issues.yml @@ -0,0 +1,57 @@ +name: Auto-close issues mentioned in merged PR + +on: + pull_request_target: + types: [closed] + +permissions: + issues: write + pull-requests: read + +jobs: + auto-close-issues: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + + steps: + - name: Auto-close referenced issues + uses: actions/github-script@v7 + with: + script: | + const pr = context.payload.pull_request; + + // Combine PR title and body + const text = `${pr.title}\n${pr.body || ""}`; + + // Match issue references like #12, #45 + const issueNumbers = [...text.matchAll(/#(\d+)/g)] + .map(match => match[1]); + + if (issueNumbers.length === 0) { + console.log("No referenced issues found."); + return; + } + + for (const issueNumber of issueNumbers) { + try { + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + state: "closed", + }); + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + body: `Closed automatically via merged PR #${pr.number}.`, + }); + + console.log(`Closed issue #${issueNumber}`); + } catch (error) { + console.log( + `Failed to close issue #${issueNumber}: ${error.message}` + ); + } + }