Skip to content

Claude Code GitHub Actions

把 Claude Code 集成到 GitHub 工作流:在 PR/Issue 里 @claude 自动分析代码、修 bug、创建 PR

适合场景

  • 团队 PR 自动审查
  • Issue 评论触发自动实现
  • 定时跑代码质量报告
  • 安全扫描 / 依赖升级

工作原理

有人在 PR 里评论:@claude 实现用户认证

GitHub Action 触发

Claude Code 在 CI 环境启动
  ├─ Clone PR 分支
  ├─ 读 CLAUDE.md / spec
  ├─ 分析评论 + 现有代码
  └─ 实现 + 跑测试

自动 commit + push 到 PR 分支

评论 PR 总结改动

快速开始

1. 申请 Anthropic API Key

console.anthropic.com 创建 API Key(或用 Shuro 中转,按 Claude Code 配置 拿 key)。

2. 把 key 加到 GitHub Secrets

仓库 → Settings → Secrets and variables → Actions → New secret:

Name: ANTHROPIC_API_KEY
Value: sk-ant-... 或 sk-<您的 Shuro key>

3. 加 Action 文件

.github/workflows/claude.yml

yaml
name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]
  pull_request:
    types: [opened]

jobs:
  claude:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) ||
      (github.event_name == 'pull_request')
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
      actions: read
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # 如果用中转,加 base_url
          # anthropic_base_url: https://shuro.vip

4. 测试

去 GitHub 任一 Issue 评论:

@claude 看一下这个 issue,给我个修复方案

几秒后 Claude 在评论下面回复 + 可能开 PR。

用中转 Provider(Shuro)

修改 workflow 添加 anthropic_base_url

yaml
- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    anthropic_base_url: https://shuro.vip

省官方 API 费用,特别适合开源项目主动控成本

高级用法

限定权限

只让特定人触发:

yaml
jobs:
  claude:
    if: |
      contains(github.event.comment.body, '@claude') &&
      contains(fromJson('["mufan", "alice", "bob"]'), github.event.comment.user.login)

限定文件范围

只能改某些目录:

yaml
- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    allowed_paths: |
      src/**
      tests/**
      docs/**
    denied_paths: |
      .github/**
      prisma/migrations/**

指定模型

yaml
- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    model: claude-opus-4-7
    # 或便宜的
    # model: claude-haiku-4-5-20251001

提供 CLAUDE.md context

把仓库的 CLAUDE.md 自动加载(默认行为)。如果想加 extra context:

yaml
- uses: anthropics/claude-code-action@v1
  with:
    extra_context: |
      团队约定:
      - 不要用 default export
      - 提交格式遵循 conventional commit
      - PR 描述必须包含 "Why" 和 "How"

实战场景

场景 1:自动审查 PR

yaml
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            请审查这个 PR:
            1. 安全漏洞
            2. 性能问题
            3. 测试覆盖
            4. 编码规范
            输出到 PR review comment

PR 一开就自动跑 review。

场景 2:自动修 lint 错误

yaml
on:
  pull_request:

jobs:
  autofix:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.head_ref }}
      - uses: actions/setup-node@v4
      - run: npm install
      - run: npm run lint 2>&1 | tee lint.log || true
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            lint.log 里有错误,请按 ESLint 规则修复。
            修完跑 npm run lint 确认无错。
      - run: |
          git config user.email "claude-bot@example.com"
          git config user.name "Claude Bot"
          git add -A
          git commit -m "fix: lint errors (Claude bot)" || true
          git push

每个 PR 自动修 lint,再也不用提醒同事 "跑下 lint"。

场景 3:每周代码质量报告

yaml
on:
  schedule:
    - cron: '0 9 * * 1'   # 每周一早 9 点

jobs:
  weekly-report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            分析上周(git log --since='7 days ago')的代码变更:
            1. 高风险 PR
            2. 测试覆盖变化
            3. 依赖更新
            4. 复杂度趋势
            输出 Markdown,发到 Issue。

成本控制

CI 跑 Claude 真烧 token。建议:

策略实施
只对核心仓库启用不要在所有 repo 都装
限定触发条件不要 on: [push] 这种全量触发
用便宜模型审 lintmodel: claude-haiku-4-5-20251001
用 Shuro 中转比官方便宜
设月度 budgetAnthropic console 设上限

预估开销:

  • 小项目(< 100 PR/月):~$20-50/月
  • 中项目(< 500 PR/月):~$100-300/月
  • 大项目:建议自建 + 严格限流

安全

CI 里的 Claude = 真 push 代码权限

  • 不要给 denied_paths 漏掉 .github/workflows/(防止 Claude 改自己的权限)
  • 不要给 .env* 文件读权限
  • 限定 permissions: 最小化(不要 permissions: write-all
  • 看 Action 跑出的 diff 再 merge,别盲信

跟其他工具对比

Claude Code ActionCursor BugBotCodeRabbitDeepCode
触发@claude 或 PRPR 自动PR 自动PR 自动
自定义 prompt✅ 完整部分
能改代码❌(只评论)
能委派 subagent
中转 API 支持
价格按 token$20/月起$15/月起免费

Claude Code Action 最灵活,但需要写 workflow(其他是装上就跑)。

调试

看 Claude 的完整输出

Workflow 跑完去 Actions 标签 → 点失败的 run → 看 logs。Claude 的每一步都会打印。

本地模拟

act 在本地跑 Actions:

bash
brew install act
act issue_comment -e .github/test-comment.json --secret ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY

限制范围

刚开始用时只对一个测试 repo 启用,跑顺了再推广。

资源

内容采用 CC BY-NC-ND 4.0 协议 · 禁止商业使用 / 禁止改编 / 禁止训练 AI 模型