* Modify claude.yml 1. Added "Get PR details" step (NEW - lines 28-51) This new step runs ONLY when the trigger is a PR-related comment. It: - Detects if it's a PR comment vs regular issue - Fetches the PR information using GitHub API - Extracts the fork's repository name and commit SHA - Sets them as outputs (steps.pr.outputs.sha and steps.pr.outputs.repo) Why? The original workflow couldn't see fork PR code because it only checked out the main repo. 2. Split checkout into TWO conditional steps (CHANGED - lines 53-62) Before: One checkout step that always checked out main repo with fetch-depth: 1 After: Two checkout steps: - "Checkout PR branch" - Runs if PR details were fetched successfully, checks out the fork's PR branch - "Checkout repository" - Runs otherwise (for regular issues), checks out main repo Why? Need different checkout behavior for PRs (checkout fork) vs issues (checkout main). 3. Changed fetch-depth from 1 to 0 (CHANGED) Before: fetch-depth: 1 (only latest commit) After: fetch-depth: 0 (full git history) Why? Claude Code needs more context to understand the codebase and provide better reviews. Summary The original workflow could only see the main repo's code. When you commented @claude on a fork PR, it would review the wrong code! These changes make it check out the actual PR branch from the fork when reviewing PRs, while keeping the original behavior for regular issues.
84 lines
2.7 KiB
YAML
84 lines
2.7 KiB
YAML
name: Claude Code
|
|
|
|
on:
|
|
issue_comment:
|
|
types: [created]
|
|
pull_request_review_comment:
|
|
types: [created]
|
|
issues:
|
|
types: [opened, assigned]
|
|
pull_request_review:
|
|
types: [submitted]
|
|
|
|
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 == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
)
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
pull-requests: read
|
|
issues: read
|
|
id-token: write
|
|
actions: read
|
|
steps:
|
|
- name: Get PR details
|
|
if: |
|
|
(github.event_name == 'issue_comment' && github.event.issue.pull_request) ||
|
|
github.event_name == 'pull_request_review_comment' ||
|
|
github.event_name == 'pull_request_review'
|
|
id: pr
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
let prNumber;
|
|
if (context.eventName === 'issue_comment') {
|
|
prNumber = context.issue.number;
|
|
} else {
|
|
prNumber = context.payload.pull_request.number;
|
|
}
|
|
|
|
const pr = await github.rest.pulls.get({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
pull_number: prNumber
|
|
});
|
|
|
|
core.setOutput('sha', pr.data.head.sha);
|
|
core.setOutput('repo', pr.data.head.repo.full_name);
|
|
|
|
- name: Checkout PR branch
|
|
if: steps.pr.outcome == 'success'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ steps.pr.outputs.sha }}
|
|
repository: ${{ steps.pr.outputs.repo }}
|
|
fetch-depth: 0
|
|
|
|
- name: Checkout repository
|
|
if: steps.pr.outcome != 'success'
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Run Claude Code
|
|
id: claude
|
|
uses: anthropics/claude-code-action@v1
|
|
with:
|
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
|
|
# Allow Claude to read CI results on PRs
|
|
additional_permissions: |
|
|
actions: read
|
|
|
|
# Trigger when assigned to an issue
|
|
assignee_trigger: "claude"
|
|
|
|
claude_args: |
|
|
--allowedTools Bash
|
|
--system-prompt "If posting a comment to GitHub, give a concise summary of the comment at the top and put all the details in a <details> block."
|