You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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. 验证流程

  1. 创建或更新PR,触发你的构建检查
  2. 构建成功时,PR会自动添加Verified Build标签,同时移除Build Failed标签(如果存在)
  3. 构建失败或取消时,PR会自动添加Build Failed标签,同时移除Verified Build标签(如果存在)

内容的提问来源于stack exchange,提问作者new_bie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:17:08