Per review feedback on PR #1270: replace the three-way `==` OR chain in each of the four trigger branches with a single contains(fromJSON(...)) check against a shared list. Same semantics, less duplication, and the allowed-roles list is now defined once per branch instead of three times. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
93 lines
3.5 KiB
YAML
93 lines
3.5 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') &&
|
|
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)) ||
|
|
(github.event_name == 'pull_request_review_comment' &&
|
|
contains(github.event.comment.body, '@claude') &&
|
|
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)) ||
|
|
(github.event_name == 'pull_request_review' &&
|
|
contains(github.event.review.body, '@claude') &&
|
|
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.review.author_association)) ||
|
|
(github.event_name == 'issues' &&
|
|
(contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')) &&
|
|
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.issue.author_association))
|
|
)
|
|
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@v8
|
|
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@v6
|
|
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@v6
|
|
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: |
|
|
--mcp-config .mcp.json
|
|
--allowedTools "Bash,mcp__mcp-docs"
|
|
--append-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. When working on MCP-related code or reviewing MCP-related changes, use the mcp-docs MCP server to look up the latest protocol documentation. For schema details, reference https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/schema which contains versioned schemas in JSON (schema.json) and TypeScript (schema.ts) formats."
|