从失败的测试到一次命令修复 PR(GitHub Copilot CLI Challenge)

发布: (2026年2月1日 GMT+8 21:19)
5 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容(除代码块和 URL 之外),我将按照要求保持原始格式并将其翻译成简体中文。

概述

此提交针对 GitHub Copilot CLI 挑战,推出了 copilot‑bugfix,一个由 GitHub Copilot CLI 驱动的代理,能够通过单个命令将您从红色测试(失败)带到可审阅的拉取请求。您无需手动阅读堆栈跟踪、在文件中搜索或手工编写补丁,只需运行该工具,让它完成其余工作。

How It Works

  1. Run the command – 工具执行你的测试套件并捕获完整的失败输出。
  2. Build a debug bundle – 它收集一个丰富的上下文包,包含堆栈跟踪、最近的差异以及相关文件片段。
  3. Ask Copilot – 将该包发送至 gh copilot suggest,它会解释根本原因并提出统一差异(unified‑diff)补丁。
  4. Review & apply – 显示建议的补丁;确认后将其应用并重新运行测试。
  5. 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 上运行测试套件,确保所有受支持的运行时均通过检查。
  • 仓库整洁 – 包含 CODEOWNERSCONTRIBUTING、CI 徽章,以及明确的 npm 脚本(testtest:unittest:integrationtest:e2e)。

测试与 CI

CI badge

GitHub Actions 工作流运行以下矩阵:

  • Node 版本:16、18、20
  • 测试套件:单元、集成、端到端

所有检查必须全部通过,才能克隆并使用该仓库。

仓库

copilot‑bugfix on GitHub

致谢

感谢 DEV Community 和 GitHub 创建了 Copilot CLI Challenge。此次黑客马拉松激发了我们更深入地探索 AI 代理如何解决真实的开发者问题——将一个简单的“failing test”转化为完整的“bug → fix → PR”工作流,并且几乎没有摩擦。

Back to Blog

相关文章

阅读更多 »