【正文】
在快速迭代的软件开发中,将用户反馈或任务描述自动转化为代码变更,是提升效率的重要方向。本文将介绍如何利用 Claude Code 和 GitHub Actions 的工作流,实现从 **GitHub Issue 提交**到 **Pull Request 自动生成**的无人值守流程。整个过程无需人工介入,让 Claude 根据 Issue 描述直接编写代码、创建分支并提交 PR。
背景与动机
传统模式下,开发者需要手动阅读 Issue,理解需求,然后编写代码并提交 PR。对于修复类、功能增强类等常见任务,这种重复劳动可以自动化。Anthropic 新推出的 Claude Code 命令行工具提供了强大的代码理解和生成能力,结合 GitHub Actions 的事件触发器,可以构建一个 “Issue → PR” 的自动流水线。
工作流配置
以下是一个完整的 GitHub Actions 工作流示例(`.github/workflows/issue-to-pr.yml`):
yaml
name: Issue to PR with Claude Code
on:
issues:
types: [opened, labeled]
jobs: generate-pr: if: github.event.label.name == 'auto-pr' # 只对带有 auto-pr 标签的 Issue 触发 runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install Claude Code run: npm install -g @anthropic-ai/claude-code - name: Run Claude Code to create PR env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | claude code --task "基于以下 Issue 描述,在仓库中实现所需变更。请创建新分支,提交修改,并创建 Pull Request。Issue 内容:${{ github.event.issue.body }}" ```
关键技术点
- **触发条件**:工作流通过 `issues` 事件触发,并限定仅在 Issue 被打开或被打上特定标签(如 `auto-pr`)时执行,避免误触发。
- **Claude Code 命令**:使用 `claude code` 的 `--task` 参数,将 Issue 正文(`github.event.issue.body`)作为任务描述传入。Claude 会理解自然语言,定位相关文件,编写代码,并自动执行 `git` 操作。
- **凭证管理**:通过 GitHub Secrets 存储 Anthropic API Key 和 GitHub Token,确保安全。其中 `GITHUB_TOKEN` 用于让 Claude 在仓库中创建分支和 PR。
- **分支与 PR 创建**:Claude Code 本身支持调用 `gh` 命令行或直接使用 GitHub API 完成分支推送与 PR 创建。工作流中不需要额外编写脚本。
使用示例
假设你在仓库中创建了一个 Issue,标题为 “Fix typo in README”,正文描述具体拼写错误位置。打上 `auto-pr` 标签后,GitHub Actions 会自动启动。Claude Code 会读取 Issue,找到 README 文件,修正拼写,创建名为 `fix-typo-readme-123` 的分支,然后提交一个 PR,其中自动生成描述引用原始 Issue。
注意事项与扩展
- **安全性**:自动生成的代码可能存在风险,建议在 PR 上设置强制性 Code Review。
- **复杂任务**:对于涉及多文件重构或数据库变更的任务,最好在 Issue 中提供足够清晰的步骤,或结合 Claude 的思维链功能。
- **自定义提示词**:可以通过 `--prompt` 参数进一步约束 Claude 的行为,例如要求只能修改特定目录下的文件。
总结
通过 GitHub Actions + Claude Code,开发者可以轻松实现从 Issue 到 PR 的完整自动化。这不仅减少了手动开销,还能将开发者的精力集中在更高层次的架构设计上。随着大模型能力的提升,这类“无人值守”的代码交付模式将成为 DevOps 流水线中的标准组件。
——
出处:From GitHub Issue to Pull Request: Running Claude Code Unattended