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

如何获取GitHub Pull Request中含未上报第三方的必填状态检查状态?

获取GitHub Pull Request中所有必填状态检查(含未上报项)的方法

要拿到PR里所有必填状态检查(包括Jenkins等第三方工具尚未上报结果的项),需要结合分支保护规则和已提交的检查结果来对比,具体步骤如下:

核心思路

必填状态检查是在仓库的分支保护设置中定义的,不管是否已经执行,这些规则都存在。我们需要:

  1. 先获取目标分支的所有必填检查规则列表
  2. 再获取PR当前已完成的所有检查结果(包括GitHub Actions和第三方工具上报的)
  3. 对比两者,找出未上报的必填检查项

具体实现(用gh cli + jq)

1. 定义变量

OWNER="你的仓库所有者"
REPO="仓库名称"
PR_NUMBER="PR编号"

2. 获取PR的目标分支和HEAD提交SHA

# 获取PR的目标分支
TARGET_BRANCH=$(gh pr view $PR_NUMBER --repo $OWNER/$REPO --json baseRefName --jq '.baseRefName')
# 获取PR HEAD提交的SHA
COMMIT_SHA=$(gh pr view $PR_NUMBER --repo $OWNER/$REPO --json headRefOid --jq '.headRefOid')

3. 获取分支保护中的必填检查列表

这个API会返回该分支要求的所有必填检查名称,不管是否已经执行:

REQUIRED_CHECKS=$(gh api /repos/$OWNER/$REPO/branches/$TARGET_BRANCH/protection/required_status_checks --json contexts --jq '.contexts | sort')

4. 获取已上报的检查结果

需要同时获取两种类型的检查结果(部分第三方工具会用旧的Status API而不是Checks API):

# 获取已上报的Check Runs(包括GitHub Actions和用Checks API的第三方工具)
EXISTING_CHECK_RUNS=$(gh api /repos/$OWNER/$REPO/commits/$COMMIT_SHA/check-runs --json check_runs --jq '[.check_runs[].name] | sort')

# 获取已上报的Statuses(用旧Status API的第三方工具)
EXISTING_STATUSES=$(gh api /repos/$OWNER/$REPO/commits/$COMMIT_SHA/statuses --json context --jq '[.[].context] | sort')

5. 对比找出未上报的必填检查

合并已有的检查结果,再和必填列表求差集:

# 合并并去重已有的检查名称
ALL_EXISTING=$(echo "$EXISTING_CHECK_RUNS $EXISTING_STATUSES" | jq -s 'add | unique | sort')

# 计算差集,得到未上报的必填检查
MISSING_REQUIRED=$(echo "$REQUIRED_CHECKS $ALL_EXISTING" | jq -s '.[0] - .[1]')

6. 输出结果

echo "尚未上报的必填检查项:"
echo $MISSING_REQUIRED | jq -r '.[]'

注意事项

  • 调用分支保护API需要仓库的管理员权限,否则会返回权限错误。
  • 部分第三方CI/CD工具可能使用旧的Status API上报结果,因此必须同时获取Check Runs和Statuses两种数据,避免遗漏。
  • 如果仓库有多个分支保护规则,确保获取的是PR目标分支对应的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:52:47