Optimiere Workflow zum Kopieren von Labels, um verknüpfte Issues über… #7
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: Copy labels from referenced issues to PR | |
| on: | |
| pull_request: | |
| types: [opened, reopened, synchronize, ready_for_review, edited] | |
| permissions: | |
| contents: read | |
| issues: read | |
| pull-requests: write | |
| jobs: | |
| copy-issue-labels: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Copy labels from issues mentioned in PR body | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const pr = context.payload.pull_request; | |
| const prNumber = pr.number; | |
| const prBody = pr.body || ''; | |
| // Finde alle Issue-Referenzen (#12, Fixes #13 etc.) | |
| const issueMatches = [...prBody.matchAll(/(?:Fixes|Closes|Resolves)?\s*#(\d+)/gi)]; | |
| const issueNumbers = [...new Set(issueMatches.map(m => parseInt(m[1], 10)))]; | |
| if (issueNumbers.length === 0) { | |
| core.info('📭 Keine referenzierten Issues im PR-Text gefunden.'); | |
| return; | |
| } | |
| core.info(`🔗 Verlinkte Issues: ${issueNumbers.join(', ')}`); | |
| const allLabels = new Set(); | |
| for (const issueNumber of issueNumbers) { | |
| core.info(`📥 Lese Labels von Issue #${issueNumber} ...`); | |
| try { | |
| const issue = await github.rest.issues.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issueNumber | |
| }); | |
| issue.data.labels.forEach(label => allLabels.add(label.name)); | |
| } catch (error) { | |
| core.warning(`⚠️ Issue #${issueNumber} konnte nicht gelesen werden: ${error.message}`); | |
| } | |
| } | |
| const labelList = [...allLabels]; | |
| if (labelList.length === 0) { | |
| core.info('📭 Keine Labels zum Übertragen gefunden.'); | |
| return; | |
| } | |
| core.info(`🏷️ Übertrage Labels auf PR #${prNumber}: ${labelList.join(', ')}`); | |
| await github.rest.issues.addLabels({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber, | |
| labels: labelList | |
| }); |