跳到主要内容

审查每一个 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;可以考虑只审查发生变更的文件。 :::

让它有用,而不是制造噪音

  • 只要求高置信度的发现 —— 一大堆吹毛求疵的意见只会被忽略。
  • 把它定位为一次初审,由人类做出是否合并的决定。

下一步