从失败的测试到一次命令修复 PR(GitHub Copilot CLI Challenge)
Source: Dev.to
请提供您希望翻译的完整文本内容(除代码块和 URL 之外),我将按照要求保持原始格式并将其翻译成简体中文。
概述
此提交针对 GitHub Copilot CLI 挑战,推出了 copilot‑bugfix,一个由 GitHub Copilot CLI 驱动的代理,能够通过单个命令将您从红色测试(失败)带到可审阅的拉取请求。您无需手动阅读堆栈跟踪、在文件中搜索或手工编写补丁,只需运行该工具,让它完成其余工作。
How It Works
- Run the command – 工具执行你的测试套件并捕获完整的失败输出。
- Build a debug bundle – 它收集一个丰富的上下文包,包含堆栈跟踪、最近的差异以及相关文件片段。
- Ask Copilot – 将该包发送至
gh copilot suggest,它会解释根本原因并提出统一差异(unified‑diff)补丁。 - Review & apply – 显示建议的补丁;确认后将其应用并重新运行测试。
- Optional PR creation – 该工具可以创建新分支,使用 Copilot 生成符合约定的提交信息,并通过 GitHub CLI 打开 Pull Request。
用法
copilot-bugfix "npm test -- failing-test"
运行该命令会产生逐步的终端输出:
- 测试执行 → 上下文捆绑创建 → Copilot 分析 → 补丁预览
- 补丁应用 → 测试重新运行(绿色)
如果补丁被接受,工具可以自动:
- 创建一个新分支
- 生成简短的、符合约定的提交信息(例如
fix: resolve failing test in XYZ) - 打开一个带有差异的拉取请求
功能
- 自动调试 – 捕获测试输出、最近的更改以及目标代码片段。
- AI 驱动分析 – 利用 GitHub Copilot CLI 解释失败原因并提供修复建议。
- 补丁预览与安全 – 在应用前显示差异;强化的解析器会验证带围栏的差异和仅含块的补丁。
- 提交自动化 – 生成符合约定的提交信息,使其看起来像是团队成员的贡献。
- 一键 PR – 可选地创建分支并通过
gh pr create打开拉取请求。
实现细节
分析与补丁生成
一个精心挑选的上下文包会发送给 gh copilot suggest。该包包含足够的信号(测试输出、最近的 git 更改、聚焦的代码片段),让 Copilot 能够推断出错误原因,而不会被整个仓库的内容淹没。
提交信息
在应用补丁后,再次调用 Copilot CLI 生成简洁、符合约定的提交信息,遵循项目的提交风格。
安全性与诊断
该工具使用强化解析器解析 Copilot 的输出,能够识别带围栏的 diff 和仅含 hunk 的补丁。当出现异常时,可保存原始的 Copilot 输出以便调试。
面向生产的投入
- 完整的测试覆盖 – 针对解析器的单元测试(包括边缘情况的 diff 格式)、模拟 Copilot 输出并应用补丁的集成测试,以及跨平台的端到端测试,模拟
gh以验证整个 CLI 流程。 - 多版本 CI – GitHub Actions 在 Node 16、18、20 上运行测试套件,确保所有受支持的运行时均通过检查。
- 仓库整洁 – 包含
CODEOWNERS、CONTRIBUTING、CI 徽章,以及明确的 npm 脚本(test、test:unit、test:integration、test:e2e)。
测试与 CI
GitHub Actions 工作流运行以下矩阵:
- Node 版本:16、18、20
- 测试套件:单元、集成、端到端
所有检查必须全部通过,才能克隆并使用该仓库。
仓库
致谢
感谢 DEV Community 和 GitHub 创建了 Copilot CLI Challenge。此次黑客马拉松激发了我们更深入地探索 AI 代理如何解决真实的开发者问题——将一个简单的“failing test”转化为完整的“bug → fix → PR”工作流,并且几乎没有摩擦。