Eslint config stylistic indent #9
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: PR Merge - Update Related Issues with the 'waiting for release' label and comment | |
| on: | |
| pull_request: | |
| types: [closed] | |
| jobs: | |
| update-issue: | |
| if: github.event.pull_request.merged == true | |
| runs-on: ubuntu-latest | |
| permissions: | |
| issues: write | |
| pull-requests: read | |
| steps: | |
| - name: Extract issue number from PR | |
| id: extract-issue | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const prBody = context.payload.pull_request.body || ''; | |
| const prNumber = context.payload.pull_request.number; | |
| let issueNumbers = new Set(); | |
| // pattern 1: Related issue: #123 | |
| const relatedPattern = /Related issue:\s*#(\d+)/gi; | |
| let match; | |
| while ((match = relatedPattern.exec(prBody)) !== null) { | |
| issueNumbers.add(match[1]); | |
| } | |
| // pattern 2: Closes #123, Fixes #123, Resolves #123 | |
| const closingPattern = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?):?\s*#(\d+)/gi; | |
| while ((match = closingPattern.exec(prBody)) !== null) { | |
| issueNumbers.add(match[1]); | |
| } | |
| const issues = Array.from(issueNumbers); | |
| console.log('Found related issues:', issues); | |
| if (issues.length === 0) { | |
| console.log('No related issues found'); | |
| return null; | |
| } | |
| return issues; | |
| - name: Add label and comment to issues | |
| if: steps.extract-issue.outputs.result != null | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const issues = ${{ steps.extract-issue.outputs.result }}; | |
| if (!issues || issues.length === 0) { | |
| console.log('No issues to update'); | |
| return; | |
| } | |
| const prNumber = context.payload.pull_request.number; | |
| const prTitle = context.payload.pull_request.title; | |
| const prUrl = context.payload.pull_request.html_url; | |
| const prAuthor = context.payload.pull_request.user.login; | |
| const mergedBy = context.payload.pull_request.merged_by.login; | |
| for (const issueNumber of issues) { | |
| try { | |
| const { data: issue } = await github.rest.issues.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: parseInt(issueNumber) | |
| }); | |
| // check label `bug` to show in comment `this feature ...` or `this bug ...` | |
| const isBug = issue.labels.some(label => | |
| (typeof label === 'string' ? label : label.name).toLowerCase() === 'bug' | |
| ); | |
| const changeType = isBug ? 'fix' : 'feature'; | |
| console.log(`Issue #${issueNumber} is a ${changeType}`); | |
| // add label "waiting for release" | |
| await github.rest.issues.addLabels({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: parseInt(issueNumber), | |
| labels: ['waiting for release'] | |
| }); | |
| console.log(`Added label "waiting for release" to issue #${issueNumber}`); | |
| // add comment to issue | |
| const comment = ` | |
| 🎉 The pull request #${prNumber} that addresses this issue has been merged! | |
| **PR Details:** | |
| - **Title:** ${prTitle} | |
| - **Author:** @${prAuthor} | |
| - **Merged by:** @${mergedBy} | |
| - **Link:** ${prUrl} | |
| This ${changeType} will be included in the next release. | |
| `; | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: parseInt(issueNumber), | |
| body: comment | |
| }); | |
| console.log(`Added comment to issue #${issueNumber}`); | |
| } catch (error) { | |
| console.error(`Error processing issue #${issueNumber}:`, error.message); | |
| } | |
| } |