如何在GitHub PR构建检查通过/失败时自动添加对应标签?
实现GitHub PR根据构建状态自动添加标签的方案
你可以通过GitHub Actions实现这个需求,以下是具体的落地步骤和代码:
实现思路
利用GitHub Actions监听PR的创建、更新事件,以及构建检查完成事件,通过调用GitHub API获取构建状态结果,自动添加/替换对应的标签,确保PR状态和标签保持一致。
具体步骤
1. 创建GitHub Actions工作流文件
在你的仓库下创建路径 .github/workflows/pr-build-label.yml,填入以下代码:
name: Auto Label PR by Build Status on: pull_request_target: types: [opened, synchronize] check_run: types: [completed] jobs: label-pr: runs-on: ubuntu-latest permissions: pull-requests: write checks: read steps: - name: 获取PR与构建状态信息 id: pr-status uses: actions/github-script@v6 with: script: | // 关联当前事件对应的PR对象 const pr = context.payload.pull_request || context.payload.check_run.pull_requests[0]; if (!pr) { console.log("当前事件未关联PR,终止流程"); return; } // 获取PR头部提交的所有检查结果 const checks = await github.rest.checks.listForRef({ owner: context.repo.owner, repo: context.repo.repo, ref: pr.head.sha }); // 替换成你仓库中实际的构建检查名称(比如你的CI工作流名称) const targetBuildCheck = checks.data.check_runs.find(check => check.name === "CI Build"); if (!targetBuildCheck) { console.log("未找到目标构建检查,终止流程"); return; } // 输出关键参数供后续步骤使用 core.setOutput('build-conclusion', targetBuildCheck.conclusion); core.setOutput('pr-number', pr.number); - name: 添加/更新PR标签 uses: actions/github-script@v6 with: script: | const buildConclusion = "${{ steps.pr-status.outputs.build-conclusion }}"; const prNumber = ${{ steps.pr-status.outputs.pr-number }}; const repoOwner = context.repo.owner; const repoName = context.repo.repo; // 处理构建成功的情况 if (buildConclusion === "success") { // 先移除失败标签(如果存在) await github.rest.issues.removeLabel({ owner: repoOwner, repo: repoName, issue_number: prNumber, name: "Build Failed" }).catch(() => console.log("Build Failed标签不存在,跳过移除")); // 添加成功标签 await github.rest.issues.addLabels({ owner: repoOwner, repo: repoName, issue_number: prNumber, labels: ["Verified Build"] }); } // 处理构建失败/取消的情况 else if (buildConclusion === "failure" || buildConclusion === "cancelled") { // 先移除成功标签(如果存在) await github.rest.issues.removeLabel({ owner: repoOwner, repo: repoName, issue_number: prNumber, name: "Verified Build" }).catch(() => console.log("Verified Build标签不存在,跳过移除")); // 添加失败标签 await github.rest.issues.addLabels({ owner: repoOwner, repo: repoName, issue_number: prNumber, labels: ["Build Failed"] }); }
2. 关键配置说明
- 触发事件:同时监听PR的创建/同步更新、构建检查完成事件,确保任何状态变化都能触发标签更新。
- 权限设置:赋予工作流
pull-requests: write权限以修改PR标签,checks: read权限以读取构建检查结果。 - 检查名称过滤:代码中
check.name === "CI Build"需要替换成你仓库中实际的构建检查名称(比如你的GitHub Actions工作流名称)。 - 标签互斥处理:每次添加目标标签前,自动移除对立标签,避免PR上同时存在两个状态标签。
3. 验证流程
- 创建或更新PR,触发你的构建检查
- 构建成功时,PR会自动添加
Verified Build标签,同时移除Build Failed标签(如果存在) - 构建失败或取消时,PR会自动添加
Build Failed标签,同时移除Verified Build标签(如果存在)
内容的提问来源于stack exchange,提问作者new_bie
相关产品推荐
相关产品推荐

