chore: release v1.0.7 #19
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Auto-close Issues on PR Merge | |
| on: | |
| pull_request: | |
| types: [closed] | |
| jobs: | |
| close-linked-issues: | |
| # Only run if PR was actually merged (not just closed) | |
| if: github.event.pull_request.merged == true | |
| runs-on: ubuntu-latest | |
| permissions: | |
| issues: write | |
| pull-requests: read | |
| steps: | |
| - name: Extract issue numbers from PR | |
| id: extract-issues | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const prNumber = context.payload.pull_request.number; | |
| const prTitle = context.payload.pull_request.title; | |
| const prBody = context.payload.pull_request.body || ''; | |
| const prUrl = context.payload.pull_request.html_url; | |
| // Regex to find issue references like "Fixes #123", "Closes #456", "Resolves #789" | |
| const issuePattern = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s*:?\s*#(\d+)/gi; | |
| const issueNumbers = new Set(); | |
| let match; | |
| // Search in PR title | |
| while ((match = issuePattern.exec(prTitle)) !== null) { | |
| issueNumbers.add(match[1]); | |
| } | |
| // Search in PR body | |
| issuePattern.lastIndex = 0; // Reset regex | |
| while ((match = issuePattern.exec(prBody)) !== null) { | |
| issueNumbers.add(match[1]); | |
| } | |
| const issues = Array.from(issueNumbers); | |
| console.log(`Found issues: ${issues.join(', ')}`); | |
| // Store for next step | |
| core.setOutput('issue_numbers', issues.join(',')); | |
| core.setOutput('pr_number', prNumber); | |
| core.setOutput('pr_url', prUrl); | |
| core.setOutput('pr_title', prTitle); | |
| - name: Comment and close issues | |
| if: steps.extract-issues.outputs.issue_numbers != '' | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const issueNumbers = '${{ steps.extract-issues.outputs.issue_numbers }}'.split(','); | |
| const prNumber = '${{ steps.extract-issues.outputs.pr_number }}'; | |
| const prUrl = '${{ steps.extract-issues.outputs.pr_url }}'; | |
| const prTitle = `${{ steps.extract-issues.outputs.pr_title }}`; | |
| for (const issueNumber of issueNumbers) { | |
| if (!issueNumber) continue; | |
| try { | |
| // Add comment to the issue | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: parseInt(issueNumber), | |
| body: `✅ This issue has been automatically closed because PR #${prNumber} was merged.\n\n**PR Title:** ${prTitle}\n**PR Link:** ${prUrl}` | |
| }); | |
| console.log(`Added comment to issue #${issueNumber}`); | |
| // Close the issue | |
| await github.rest.issues.update({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: parseInt(issueNumber), | |
| state: 'closed' | |
| }); | |
| console.log(`Closed issue #${issueNumber}`); | |
| } catch (error) { | |
| console.error(`Error processing issue #${issueNumber}:`, error.message); | |
| } | |
| } |