主题
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.vip4. 测试
去 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 commentPR 一开就自动跑 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] 这种全量触发 |
| 用便宜模型审 lint | model: claude-haiku-4-5-20251001 |
| 用 Shuro 中转 | 比官方便宜 |
| 设月度 budget | Anthropic 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 Action | Cursor BugBot | CodeRabbit | DeepCode | |
|---|---|---|---|---|
| 触发 | @claude 或 PR | PR 自动 | 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 启用,跑顺了再推广。
