审查每一个 PR 的 GitHub Action
一个经典的高价值自动化:让 Claude 审查每一个拉取请求,并把它的发现作为评论发布出来 —— 在 CI 中以 无头模式 运行。下面是它的整体形态,以及保障其安全的护栏。
它做什么
在每个 PR 上:检出 diff,让 Claude 审查其中的 bug/边界情况/约定问题,然后发布一条评论。最终仍由人类决定;Claude 只是提供一次快速的初审。
工作流(草稿)
name: Claude PR review
on: pull_request
permissions:
contents: read
pull-requests: write # to comment — NOT write to code
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- name: Review the diff
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
git diff origin/${{ github.base_ref }}...HEAD > /tmp/diff.patch
claude -p "Review this diff for correctness bugs, missing edge cases, and
security issues. Report ONLY high-confidence findings as a Markdown
checklist with file:line. Diff:" < /tmp/diff.patch > /tmp/review.md
# then post /tmp/review.md as a PR comment (e.g. with the gh CLI or an action)
(具体的无头调用方式可能有所不同 —— 请参阅文档。原理是:喂入 diff,捕获 Markdown,然后发布出去。)
护栏(请阅读 加固自主运行)
:::warning CI 中的最小权限原则
- 只评论。 授予
pull-requests: write,而不是contents: write—— 这个机器人不应推送代码。 - 限定 token 的作用范围;绝不要把部署/密钥访问权限暴露给一个读取不可信 PR 内容的任务。
- 将 PR 内容视为不可信 —— 它可能携带 提示词注入;不要让该任务执行有后果的操作。
- 控制成本 —— 大型 diff 会消耗 token;可以考虑只审查发生变更的文件。 :::
让它有用,而不是制造噪音
- 只要求高置信度的发现 —— 一大堆吹毛求疵的意见只会被忽略。
- 把它定位为一次初审,由人类做出是否合并的决定。