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

如何通过命令行/脚本检测GitHub拉取请求是否因审核不足而被阻止

如何通过命令行/脚本检测GitHub拉取请求是否因审核不足而被阻止

我来帮你搞定这个需求!要检测PR是不是因为审核不足被阻止,咱们可以用GitHub官方的CLI工具(gh)或者直接调用GitHub REST API,两种方法都能实现脚本化的检测,下面给你详细拆解:

方法一:用GitHub CLI(gh)实现(推荐,更简单)

GitHub CLI是官方提供的命令行工具,不用自己处理API授权的细节,非常适合脚本场景。

前置准备

先确保你已经安装了gh,并且完成了登录:

gh auth login

脚本示例

下面的脚本会检测指定PR是否被阻止,并且判断是否是因为审核不足导致的:

# 替换成你的PR编号
PR_NUMBER=123

# 获取PR的关键状态数据
PR_DATA=$(gh pr view $PR_NUMBER --json mergeStateStatus,reviewDecision,requiredApprovingReviewCount,reviewRequests)

# 解析JSON字段
MERGE_STATUS=$(echo $PR_DATA | jq -r '.mergeStateStatus')
REVIEW_DECISION=$(echo $PR_DATA | jq -r '.reviewDecision')
REQUIRED_REVIEWS=$(echo $PR_DATA | jq -r '.requiredApprovingReviewCount')
PENDING_REQUESTS=$(echo $PR_DATA | jq -r '.reviewRequests.users | length')

# 判断并输出结果
if [ "$MERGE_STATUS" == "BLOCKED" ]; then
    echo "PR 当前被阻止,原因排查:"
    if [ "$REVIEW_DECISION" == "REVIEW_REQUIRED" ]; then
        echo "- 审核不足:分支保护规则要求至少 $REQUIRED_REVIEWS 个有效审核(审核人不能是最后提交者)"
        if [ $PENDING_REQUESTS -gt 0 ]; then
            echo "- 还有 $PENDING_REQUESTS 个待处理的审核请求"
        fi
    fi
    # 你还可以在这里添加其他阻止原因的检测,比如状态检查失败、分支冲突等
else
    echo "PR 当前可以正常合并"
fi

字段说明

  • mergeStateStatus:返回BLOCKED表示PR被阻止
  • reviewDecision:返回REVIEW_REQUIRED说明审核数未达标(已经自动排除了最后提交者的无效审核)
  • requiredApprovingReviewCount:分支保护规则要求的最少有效审核数

方法二:直接调用GitHub REST API(适合不想装gh的场景)

如果不想安装GitHub CLI,也可以直接用curl调用API,需要先生成一个个人访问令牌(PAT),权限要勾选repo范围。

脚本示例

# 替换成你的信息
PR_NUMBER=123
OWNER="你的用户名或组织名"
REPO="仓库名称"
PAT="你的个人访问令牌"

# 获取PR基本信息
PR_DATA=$(curl -s -H "Authorization: token $PAT" \
    "https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER")

# 获取目标分支的保护规则
PROTECTION_DATA=$(curl -s -H "Authorization: token $PAT" \
    "https://api.github.com/repos/$OWNER/$REPO/branches/$(echo $PR_DATA | jq -r '.base.ref')/protection")

# 解析关键字段
MERGEABLE=$(echo $PR_DATA | jq -r '.mergeable')
REVIEW_DECISION=$(echo $PR_DATA | jq -r '.review_decision')
REQUIRED_REVIEWS=$(echo $PROTECTION_DATA | jq -r '.required_pull_request_reviews.required_approving_review_count // 0')

# 判断并输出结果
if [ "$MERGEABLE" == "false" ]; then
    echo "PR 当前被阻止,原因排查:"
    if [ "$REVIEW_DECISION" == "REVIEW_REQUIRED" ]; then
        echo "- 审核不足:分支保护规则要求至少 $REQUIRED_REVIEWS 个有效审核,且审核人不能是最后提交者"
    fi
    # 可扩展检测其他阻止原因,比如冲突、状态检查失败等
else
    echo "PR 当前可以正常合并"
fi

注意点

GitHub API会自动处理“审核人不能是最后提交者”的规则——如果最后提交者自己审核了PR,这个审核不会被计入有效审核数,所以只要review_decision返回REVIEW_REQUIRED,就说明当前有效审核数没达到分支保护的要求。

备注:内容来源于stack exchange,提问作者Eyal Gerber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:59:35