diff --git a/.github/workflows/close-issue-on-dev.yml b/.github/workflows/close-issue-on-dev.yml new file mode 100644 index 0000000..b1b70bc --- /dev/null +++ b/.github/workflows/close-issue-on-dev.yml @@ -0,0 +1,47 @@ +name: Auto Close Issue on Dev Merge + +on: + pull_request: + types: [closed] + branches: + - dev + +jobs: + close-linked-issue: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: read + steps: + - name: Close Issue + uses: actions/github-script@v7 + with: + script: | + const body = context.payload.pull_request.body; + const repo_owner = context.repo.owner; + const repo_name = context.repo.repo; + + // Regex to find "closes #123", "fixes #123", etc. + const re = /(?:close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved)\s+#(\d+)/gi; + let match; + + while ((match = re.exec(body)) !== null) { + const issue_number = match[1]; + console.log(`Found linked issue: ${issue_number}. Closing...`); + + await github.rest.issues.update({ + owner: repo_owner, + repo: repo_name, + issue_number: issue_number, + state: 'closed', + state_reason: 'completed' + }); + + await github.rest.issues.createComment({ + owner: repo_owner, + repo: repo_name, + issue_number: issue_number, + body: `Closed automatically via PR #${context.payload.pull_request.number} merged into dev.` + }); + } \ No newline at end of file