ci: automatically set pr labels upon open (#7613)

This commit is contained in:
Abner Zheng
2024-04-15 19:45:03 +08:00
committed by GitHub
parent 58cd4c5ed8
commit 288b7fb37b
2 changed files with 59 additions and 0 deletions

35
.github/scripts/label_pr.js vendored Normal file
View File

@ -0,0 +1,35 @@
module.exports = async ({ github, context }) => {
try {
const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body;
const repo = context.repo;
const repoUrl = context.payload.repository.html_url;
const pattern = new RegExp(`(close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved) ${repoUrl}/issues/(?<issue_number>\\d+)`, 'i')
const re = prBody.match(pattern);
const issueNumber = re.groups?.issue_number;
if (!issueNumber) {
console.log("No issue reference found in PR description.");
return;
}
const issue = await github.rest.issues.get({
...repo,
issue_number: issueNumber,
});
const issueLabels = issue.data.labels.map(label => label.name);
if (issueLabels.length > 0) {
await github.rest.issues.setLabels({
...repo,
issue_number: prNumber,
labels: issueLabels,
});
}
} catch (err) {
console.error(`Failed to label PR`);
console.error(err);
}
}

24
.github/workflows/label-pr.yml vendored Normal file
View File

@ -0,0 +1,24 @@
name: Label PRs
on:
pull_request:
types: [opened]
jobs:
label_prs:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Label PRs
uses: actions/github-script@v7
with:
script: |
const label_pr = require('./.github/scripts/label_pr.js')
await label_pr({github, context})