PRCheckloop 是一个用于把 GitHub Pull Request 的检查状态推进到全绿的修复循环技能。它的核心目标是:让 PR 在最新 head SHA 上的检查全部通过,或者在无法修复时给出一个具体、可执行的阻塞说明。
用途
该技能专注于 GitHub PR 的 CI/状态检查,不处理评审评论,也不负责 PR 模板清理。如果仓库托管在 GitLab,应停止使用并改用 check-pr。它只关注最新 PR head SHA 的检查,忽略旧提交上的失败检查。如果用户同时希望清理评审评论,可以把它与 check-pr 搭配使用。
主要能力
- 识别 PR:未提供 PR 编号时,从当前分支检测;必要时切换到 PR 分支。
- 跟踪最新 head SHA:始终针对当前 PR head SHA 工作,每次推送后刷新 HEAD_SHA 并重新开始检查循环。
- 清点检查:同时获取 GitHub check runs 和旧式 commit status contexts,也提供 GraphQL 的 PR 级汇总视图。
- 等待检查运行:新推送后每 15-30 秒轮询,直到检查出现并进入终态、出现失败,或合理等待(通常 2 分钟)后仍无检查出现。
- 分类失败:区分代码/测试回归、lint/类型/构建不匹配、偶发或临时基础设施问题、外部服务/状态应用失败、缺失密钥/权限/分支保护问题等。
- 修复可操作失败:阅读工作流或失败命令,尽量本地复现,做最小正确修复,先做聚焦验证再做更广验证,提交并推送。
- 精确升级阻塞:报告 PR URL、最新 head SHA、失败或缺失的检查名称、详情 URL、已尝试的操作、阻塞原因、可能的解锁方以及下一步具体行动。
使用方式
技能以命令行工作流方式运行,依赖 gh(GitHub CLI)和 jq 等工具。典型步骤包括:用 gh pr view 获取 PR 元数据;用 gh api 获取 check-runs 和 status;用 gh run list / gh run view / gh run view --log-failed 调查 GitHub Actions 失败;修复后 git push,等待 5 秒,刷新 PR 元数据并重新进入检查循环。最大迭代次数默认 5 次。
检查状态判定
- 终态成功:check runs 的 SUCCESS、NEUTRAL、SKIPPED;status contexts 的 SUCCESS。
- 等待中:check runs 的 QUEUED、PENDING、WAITING、REQUESTED、IN_PROGRESS;status contexts 的 PENDING。
- 失败:check runs 的 FAILURE、TIMED_OUT、CANCELLED、ACTION_REQUIRED、STARTUP_FAILURE、STALE;status contexts 的 FAILURE、ERROR。
适用场景
适用于在评审修复后 PR 仍有失败或待处理检查的情况,需要把 PR 推进到可合并的绿色状态。也适用于需要区分“代码问题”与“外部阻塞”并给出明确升级信息的场景。
限制
仅支持 GitHub PR,不支持 GitLab。只处理 CI/状态检查,不处理评审评论或 PR 模板。对失败任务在没有代码变更的情况下只允许重跑一次,不循环重跑。若最新 SHA 没有出现检查,需要检查 .github/workflows/、工作流路径过滤和分支保护预期;若缺失检查无法从仓库侧引起或修复,则升级处理。若失败需要凭据或基础设施访问权限,则无法继续修复。
输出
技能完成时报告:PR URL 与分支、最终 head SHA、绿色/待处理/失败检查汇总、所做修复与运行的验证、是否已推送变更,以及未完全变绿时的阻塞摘要。