Skip to content

gh-fix-ci 解决的是 GitHub PR CI 失败后,日志散在各个检查项里、人工找报错费时间的问题。它用 gh CLI 拉取失败日志、提取关键片段,然后走 plan→approve→implement 的闭环修复流程。

GitHub PR CI 失败怎么快速定位:gh-fix-ci 技能怎么用

PR 开了,CI 红了。

打开 Actions 页面,一堆 job,点进去翻日志,找到报错位置,再判断怎么修——这套流程手动做一遍不难,但如果每天要处理好几个 PR,或者让 AI 代替你盯,就需要一个可以自动化的路径。

gh-fix-ci 就是为这个场景设计的。它依赖 GitHub 官方 CLI gh,把"找日志→摘要失败→制定计划→执行修复"做成一条工作流。

它解决什么问题

手动调试 GitHub CI 失败时,常见的摩擦点有三个:

日志量大,找报错靠滚动。Actions 日志往往几千行,真正的报错可能藏在 step 3 里某一条 assert,或者 TypeScript 编译输出的第 47 行。

检查项多,不知道从哪个开始。一个 PR 可能有 lint、type-check、unit test、e2e、build 几个 job,只看红色标记不知道哪个是根因。

修了一个,出来另一个。没有系统提取失败上下文,修复往往靠猜,改了一处触发了另一处。

gh-fix-ci 的内置脚本 inspect_pr_checks.py 会把所有失败检查项的日志片段提取出来,交给 AI 统一判断,再用 plan 技能起草修复方案,等你确认后才执行。

前提条件

需要 gh CLI 已安装并完成认证:

bash
gh auth login
gh auth status

如果在沙箱环境里 gh auth status 被拦截,加 sandbox_permissions=require_escalated 重新运行。

基本用法

调用内置脚本检查当前分支的 PR:

bash
python "<path-to-skill>/scripts/inspect_pr_checks.py" --repo "." --pr "123"

--json 输出机器可读格式,适合 AI 接收:

bash
python "<path-to-skill>/scripts/inspect_pr_checks.py" --repo "." --pr "123" --json

如果要控制日志片段长度(默认 100 行,每侧 20 行上下文):

bash
python "<path-to-skill>/scripts/inspect_pr_checks.py" --repo "." --max-lines 200 --context 40

工作流程说明

脚本输出失败摘要后,工作流接着走:

  1. 列出失败检查项 — 名称、状态、对应的 Actions run URL。
  2. 提取日志片段 — 找报错行,附上下文。
  3. 汇总给 AI — 所有失败统一交给 AI 判断根因,不是一个 job 一个 job 单独看。
  4. 制定修复计划 — 用 plan 技能起草,列出每处改动。
  5. 确认后执行 — 等你批准再改文件。
  6. 重新检查 — 建议跑 gh pr checks 验证。

非 GitHub Actions 的检查项(比如 Buildkite、外部服务)不会自动处理,只报告 detailsUrl,标注为 out of scope。

容易用错的地方

不要用 --json 后直接让 AI 解析全量 JSON。日志字段很长,应该先让脚本提取片段,再传给 AI。inspect_pr_checks.py 默认已经做了截断,不需要手动处理。

Buildkite 或其他外部 CI 不在处理范围内。如果 PR checks 里有 Buildkite job 失败,这个技能只报告 URL,不会尝试拉日志。不要期望它修 Buildkite 的问题。

认证 scope 不够会导致日志拉不下来gh auth status 里需要有 workflowrepo scope。如果日志拉取失败,先检查 scope,不要直接去手动找日志。

和其他技能的关系

这个技能依赖 plan 技能来做方案确认环节——不会直接修改文件,必须先出计划、等你批准。如果你的 AI 工具没有 plan 技能,可以改成让 AI 把修复方案写到 plan.md,你审完再让它执行。

gh-fix-ci 解决的是"找哪里失败、怎么修"这一步。找到问题后,如果需要系统性改写 CI 流程或质量门配置,可以配合 CI/CD 自动化技能 一起用。

下载 gh-fix-ci 中文版 Skill ZIP

你可能还需要

同类技能:

同工具场景: