name: gh-fix-ci
描述: 当用户要求调试或修复在 GitHub Actions 中运行失败的 GitHub PR 检查时使用;使用 gh 来检查检查和日志,总结失败上下文,草拟修复计划,并在明确批准后实施。将外部提供商(例如 Buildkite)视为超出范围,仅报告详细信息 URL。
metadata:
作者: github.com/openai/skills
版本: ‘1.0.0’
GitHub PR 检查计划修复
概述
使用 gh 定位失败的 PR 检查,获取 GitHub Actions 日志以查找可操作的失败,总结失败片段,然后提出修复计划并在明确批准后实施。
- 如果有一个面向计划的技能(例如
create-plan)可用,请使用它;否则,在线起草一个简洁的计划,并在实施前请求批准。
前提条件:使用标准的 GitHub CLI 进行一次身份验证(例如,运行 gh auth login),然后通过 gh auth status 确认(通常需要 repo + workflow 范围)。
输入
repo: 仓库内的路径(默认.)pr: PR 编号或 URL(可选;默认为当前分支的 PR)gh对仓库主机的身份验证
快速开始
python "<路径到技能>/scripts/inspect_pr_checks.py" --repo "." --pr "<编号或URL>"- 如果要使用机器友好的输出进行总结,请添加
--json。
工作流程
- 验证 gh 身份验证。
- 在仓库中运行
gh auth status。 - 如果未验证,请要求用户在继续之前运行
gh auth login(确保 repo + workflow 范围)。
- 在仓库中运行
- 解析 PR。
- 优先当前分支的 PR:
gh pr view --json number,url。 - 如果用户提供了 PR 编号或 URL,直接使用。
- 优先当前分支的 PR:
- 检查失败的检查(仅限 GitHub Actions)。
- 首选:运行捆绑脚本(处理 gh 字段漂移和作业日志回退):
python "<路径到技能>/scripts/inspect_pr_checks.py" --repo "." --pr "<编号或URL>"- 添加
--json以获取机器友好的输出。
- 手动回退:
gh pr checks <pr> --json name,state,bucket,link,startedAt,completedAt,workflow- 如果字段被拒绝,请用
gh报告的可用字段重新运行。
- 如果字段被拒绝,请用
- 对于每个失败的检查,从
detailsUrl提取运行 ID 并运行:gh run view <run_id> --json name,workflowName,conclusion,status,url,event,headBranch,headShagh run view <run_id> --log
- 如果运行日志显示仍在进行中,直接获取作业日志:
gh api "/repos/<所有者>/<仓库>/actions/jobs/<作业_id>/logs" > "<路径>"
- 首选:运行捆绑脚本(处理 gh 字段漂移和作业日志回退):
- 限定非 GitHub Actions 检查的范围。
- 如果
detailsUrl不是 GitHub Actions 运行,则标记为外部,仅报告 URL。 - 不要尝试 Buildkite 或其他提供商;保持工作流程简洁。
- 如果
- 为用户总结失败。
- 提供失败的检查名称、运行 URL(如果有)和简洁的日志片段。
- 明确指出缺失的日志。
- 创建计划。
- 使用
create-plan技能草拟一个简洁的计划并请求批准。
- 使用
- 批准后实施。
- 应用批准的计划,总结差异/测试,并询问是否打开 PR。
- 重新检查状态。
- 更改后,建议重新运行相关测试和
gh pr checks以确认。
- 更改后,建议重新运行相关测试和
捆绑资源
scripts/inspect_pr_checks.py
获取失败的 PR 检查,拉取 GitHub Actions 日志,并提取失败片段。当失败仍然存在时以非零退出,以便在自动化中使用。
使用示例:
python "<路径到技能>/scripts/inspect_pr_checks.py" --repo "." --pr "123"python "<路径到技能>/scripts/inspect_pr_checks.py" --repo "." --pr "https://github.com/org/repo/pull/123" --jsonpython "<路径到技能>/scripts/inspect_pr_checks.py" --repo "." --max-lines 200 --context 40