name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
# Check if user is authorized to trigger Claude
check-auth:
runs-on: ubuntu-latest
outputs:
authorized: ${{ steps.auth.outputs.authorized }}
has-trigger: ${{ steps.trigger.outputs.has-trigger }}
steps:
- name: Check authorization
id: auth
run: |
if [[ "${{ github.actor }}" == "bborbe" ]]; then
echo "authorized=true" >> $GITHUB_OUTPUT
exit 0
fi
case "${{ github.event_name }}" in
"pull_request_review_comment"|"pull_request_review")
association="${{ github.event.pull_request.author_association }}"
;;
"issue_comment"|"issues")
association="${{ github.event.issue.author_association }}"
;;
*)
association=""
;;
esac
if [[ "$association" == "COLLABORATOR" || "$association" == "MEMBER" || "$association" == "OWNER" ]]; then
echo "authorized=true" >> $GITHUB_OUTPUT
else
echo "authorized=false" >> $GITHUB_OUTPUT
fi
- name: Check trigger phrase
id: trigger
run: |
case "${{ github.event_name }}" in
"issue_comment"|"pull_request_review_comment")
if [[ "${{ contains(github.event.comment.body, '@claude') }}" == "true" ]]; then
echo "has-trigger=true" >> $GITHUB_OUTPUT
else
echo "has-trigger=false" >> $GITHUB_OUTPUT
fi
;;
"pull_request_review")
if [[ "${{ contains(github.event.review.body, '@claude') }}" == "true" ]]; then
echo "has-trigger=true" >> $GITHUB_OUTPUT
else
echo "has-trigger=false" >> $GITHUB_OUTPUT
fi
;;
"issues")
if [[ "${{ contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude') }}" == "true" ]]; then
echo "has-trigger=true" >> $GITHUB_OUTPUT
else
echo "has-trigger=false" >> $GITHUB_OUTPUT
fi
;;
*)
echo "has-trigger=false" >> $GITHUB_OUTPUT
;;
esac
claude:
needs: check-auth
if: needs.check-auth.outputs.authorized == 'true' && needs.check-auth.outputs.has-trigger == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'
# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'