Skip to content

Commit 0a5f8a6

Browse files
authored
Claude PR Assistant workflow (#128)
1 parent bf21e05 commit 0a5f8a6

File tree

2 files changed

+132
-0
lines changed

2 files changed

+132
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Claude Code Review
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize]
6+
# Optional: Only run on specific file changes
7+
# paths:
8+
# - "src/**/*.ts"
9+
# - "src/**/*.tsx"
10+
# - "src/**/*.js"
11+
# - "src/**/*.jsx"
12+
13+
jobs:
14+
claude-review:
15+
# Optional: Filter by PR author
16+
# if: |
17+
# github.event.pull_request.user.login == 'external-contributor' ||
18+
# github.event.pull_request.user.login == 'new-developer' ||
19+
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20+
21+
# Skip on draft PR
22+
if: |
23+
github.event.pull_request.draft == false &&
24+
!contains(github.event.pull_request.title, '[WIP]')
25+
26+
runs-on: ubuntu-latest
27+
permissions:
28+
contents: write
29+
pull-requests: write
30+
issues: write
31+
id-token: write
32+
33+
steps:
34+
- name: Checkout repository
35+
uses: actions/checkout@v4
36+
with:
37+
fetch-depth: 1
38+
39+
- name: Run Claude Code Review
40+
id: claude-review
41+
uses: anthropics/claude-code-action@beta
42+
with:
43+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
44+
45+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
46+
model: "claude-opus-4-20250514"
47+
48+
# Direct prompt for automated review (no @claude mention needed)
49+
direct_prompt: |
50+
Please review this pull request and provide feedback on:
51+
- Code quality and best practices
52+
- Potential bugs or issues
53+
- Performance considerations
54+
- Security concerns
55+
- Test coverage
56+
57+
Be constructive and helpful in your feedback.
58+
59+
# Optional: Customize review based on file types
60+
# direct_prompt: |
61+
# Review this PR focusing on:
62+
# - For TypeScript files: Type safety and proper interface usage
63+
# - For API endpoints: Security, input validation, and error handling
64+
# - For React components: Performance, accessibility, and best practices
65+
# - For tests: Coverage, edge cases, and test quality
66+
67+
# Optional: Different prompts for different authors
68+
# direct_prompt: |
69+
# ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
70+
# 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
71+
# 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
72+
73+
# Optional: Add specific tools for running tests or linting
74+
# allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"

.github/workflows/claude.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Claude Code
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
pull_request_review_comment:
7+
types: [created]
8+
issues:
9+
types: [opened, assigned]
10+
pull_request_review:
11+
types: [submitted]
12+
13+
jobs:
14+
claude:
15+
if: |
16+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20+
runs-on: ubuntu-latest
21+
permissions:
22+
contents: write
23+
pull-requests: write
24+
issues: write
25+
id-token: write
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
with:
30+
fetch-depth: 1
31+
32+
- name: Run Claude Code
33+
id: claude
34+
uses: anthropics/claude-code-action@beta
35+
with:
36+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
37+
38+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
39+
model: "claude-opus-4-20250514"
40+
41+
# Optional: Customize the trigger phrase (default: @claude)
42+
# trigger_phrase: "/claude"
43+
44+
# Optional: Trigger when specific user is assigned to an issue
45+
# assignee_trigger: "claude-bot"
46+
47+
# Optional: Allow Claude to run specific commands
48+
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
49+
50+
# Optional: Add custom instructions for Claude to customize its behavior for your project
51+
# custom_instructions: |
52+
# Follow our coding standards
53+
# Ensure all new code has tests
54+
# Use TypeScript for new files
55+
56+
# Optional: Custom environment variables for Claude
57+
# claude_env: |
58+
# NODE_ENV: test

0 commit comments

Comments
 (0)