|
@@ -494,6 +494,13 @@ jobs:
|
|
|
- uses: actions/checkout@v7
|
|
- uses: actions/checkout@v7
|
|
|
with:
|
|
with:
|
|
|
persist-credentials: false
|
|
persist-credentials: false
|
|
|
|
|
+ # Read-only: this job holds a write-scoped token, so building or running
|
|
|
|
|
+ # anything out of pr-head/ would turn the review into a pwn-request.
|
|
|
|
|
+ - uses: actions/checkout@v7
|
|
|
|
|
+ with:
|
|
|
|
|
+ ref: refs/pull/${{ github.event.pull_request.number || github.event.issue.number }}/head
|
|
|
|
|
+ path: pr-head
|
|
|
|
|
+ persist-credentials: false
|
|
|
- uses: anthropics/claude-code-action@v1
|
|
- uses: anthropics/claude-code-action@v1
|
|
|
with:
|
|
with:
|
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -501,13 +508,13 @@ jobs:
|
|
|
allowed_non_write_users: "*"
|
|
allowed_non_write_users: "*"
|
|
|
plugin_marketplaces: "https://github.com/anthropics/claude-code.git"
|
|
plugin_marketplaces: "https://github.com/anthropics/claude-code.git"
|
|
|
plugins: "code-review@claude-code-plugins"
|
|
plugins: "code-review@claude-code-plugins"
|
|
|
- prompt: "/code-review:code-review --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number || github.event.issue.number }}"
|
|
|
|
|
|
|
+ prompt: "/code-review:code-review high --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number || github.event.issue.number }}"
|
|
|
claude_args: |
|
|
claude_args: |
|
|
|
--model claude-opus-5
|
|
--model claude-opus-5
|
|
|
--effort xhigh
|
|
--effort xhigh
|
|
|
--max-turns 100
|
|
--max-turns 100
|
|
|
- --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh api:*),Bash(gh pr diff:*),Read(//tmp/**),Write(//tmp/**),Edit(//tmp/**)"
|
|
|
|
|
- --append-system-prompt "Before reviewing, read REVIEW.md at the repository root and follow it: it defines what counts as a blocking finding in this repository, what not to report, and the repo-specific checks. Three overrides apply here. First, the skip gate for already-reviewed PRs: an existing Claude review comment justifies skipping ONLY when its 'Reviewed head:' SHA equals the PR's current head SHA; when the head has moved on, or this run was triggered by an explicit '@claude review' comment, run the full review, focusing on the commits since the previously reviewed head. Second, this is a headless run that terminates the moment you end your turn: launch every subagent with run_in_background set to false and wait for its result inside the same turn - never end your turn while a subagent is still running, and never end it before the review comment is posted. A run that ends without posting the review has failed. Third, the comment you post is the only part of this run anyone can see: it must carry the coverage list REVIEW.md asks for, whether or not you found anything."
|
|
|
|
|
|
|
+ --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh api:*),Bash(gh pr diff:*),Read(//tmp/**),Write(//tmp/**),Edit(//tmp/**),WebFetch,WebSearch"
|
|
|
|
|
+ --append-system-prompt "Before reviewing, read REVIEW.md at the repository root and follow it: it defines what counts as a blocking finding in this repository, what not to report, and the repo-specific checks. Five overrides apply here. First, the skip gate for already-reviewed PRs: an existing Claude review comment justifies skipping ONLY when its 'Reviewed head:' SHA equals the PR's current head SHA; when the head has moved on, or this run was triggered by an explicit '@claude review' comment, run the full review, focusing on the commits since the previously reviewed head. Second, this is a headless run that terminates the moment you end your turn: launch every subagent with run_in_background set to false and wait for its result inside the same turn - never end your turn while a subagent is still running, and never end it before the review comment is posted. A run that ends without posting the review has failed. Third, the comment you post is the only part of this run anyone can see: it must carry the coverage list REVIEW.md asks for, whether or not you found anything. Fourth, the default working tree is the BASE branch, and a read-only checkout of the pull request head sits beside it in pr-head/: read and grep the changed files under pr-head/, and treat anything read outside it as the pre-merge baseline rather than as the code under review. Never build, install or execute anything from pr-head/ - this job holds a write-scoped token, so running pull-request code with it is the workflow vulnerability REVIEW.md itself calls blocking. Fifth, you cannot build or test here, but CI already did: read the head commit's checks with 'gh api repos/OWNER/REPO/commits/HEAD_SHA/check-runs' and report what they actually concluded instead of writing that verification was unavailable. A required check that failed, or that never ran on this head, is itself a finding."
|
|
|
- name: Upload the run transcript
|
|
- name: Upload the run transcript
|
|
|
if: always()
|
|
if: always()
|
|
|
env:
|
|
env:
|