Claude Code can be integrated into GitHub Actions workflows to automate code reviews, generate documentation, perform security audits, and enhance your CI/CD pipeline with AI-powered capabilities.
Add API key to GitHub Secrets
# In your repository settings:
# Settings → Secrets and variables → Actions
# Add new repository secret: ANTHROPIC_API_KEY
Create basic workflow
name : Claude Code Analysis
types : [ opened , synchronize ]
- uses : actions/checkout@v4
fetch-depth : 0 # Full history for better context
- name : Install Claude Code
# Install Claude Code CLI
npm install -g @anthropic-ai/claude-code
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
--base origin/${{ github.base_ref }} \
--head ${{ github.sha }} \
--output review-report.md
uses : actions/github-script@v7
const fs = require('fs');
const review = fs.readFileSync('review-report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
Test the workflow
# Create a test PR to trigger the workflow
git checkout -b test-claude-code
git commit -m " Test Claude Code integration "
git push origin test-claude-code
Comprehensive PR Review
types : [ opened , synchronize ]
- uses : actions/checkout@v4
- name : Get Changed Files
# Get list of changed files
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...${{ github.sha }})
echo "files<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_FILES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name : Claude Code Review
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
cat > review-prompt.txt << 'EOF'
Review this pull request focusing on:
1. Code quality and best practices
2. Potential bugs or issues
3. Security vulnerabilities
4. Performance implications
5. Suggestions for improvement
${{ steps.changed-files.outputs.files }}
Provide specific, actionable feedback with code examples where applicable.
Format as GitHub Flavored Markdown.
--prompt-file review-prompt.txt \
--base origin/${{ github.base_ref }} \
- name : Post Review Comments
uses : actions/github-script@v7
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
// Check if review is substantial
if (review.length > 100) {
await github.rest.pulls.createReview({
owner: context.repo.owner,
pull_number: context.issue.number,
name : Generate API Documentation
- uses : actions/checkout@v4
- name : Generate API Docs
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
claude "Analyze the API code in src/api and:
1. Generate comprehensive API documentation
2. Include request/response examples
3. Document error codes and handling
4. Create usage examples in multiple languages
5. Generate OpenAPI specification updates
Output in Markdown format" \
--output docs/api-reference.md
- name : Generate SDK Examples
claude "Based on the API in src/api, generate:
1. Python SDK usage examples
2. JavaScript/TypeScript examples
Store each in appropriate directory" \
- name : Commit Documentation
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git diff --staged --quiet || git commit -m "chore: Update API documentation [skip ci]"
- uses : actions/checkout@v4
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
claude "Analyze this project and update README.md:
1. Update feature list based on current code
2. Refresh installation instructions
4. Ensure all badges are current
5. Add any new configuration options
Preserve existing structure and style" \
uses : peter-evans/create-pull-request@v5
commit-message : ' docs: Update README.md '
title : ' docs: Automated README update '
This PR updates the README.md based on recent code changes.
Generated by Claude Code analysis.
Security Audit Pipeline
- cron : ' 0 2 * * 1 ' # Weekly on Monday
- uses : actions/checkout@v4
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
npm audit --json > npm-audit.json
claude "Analyze npm-audit.json and:
1. Prioritize vulnerabilities by severity and exploitability
2. Suggest specific remediation steps
3. Identify false positives
4. Recommend alternative packages if needed
5. Create PR-ready fix commands" \
--output security-report.md
- name : Code Security Review
claude "Perform security review of the codebase:
1. Check for hardcoded secrets or API keys
2. Identify SQL injection vulnerabilities
3. Find XSS vulnerabilities
4. Check authentication/authorization issues
5. Review cryptographic implementations
6. Identify OWASP Top 10 issues
Focus on src/ directory" \
--output code-security-report.md
- name : Infrastructure Security
claude "Review infrastructure configurations:
1. Check Dockerfile for security issues
2. Review k8s manifests for misconfigurations
3. Analyze GitHub Actions for security issues
4. Check for exposed sensitive data
5. Review CORS and CSP policies" \
--output infra-security-report.md
uses : actions/upload-artifact@v4
Unit Test Generation
- name : Generate Missing Tests
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
# Find files with low coverage
UNCOVERED=$(find src -name "*.js" -o -name "*.ts" | \
xargs -I {} sh -c 'test -f "$(echo {} | \
sed "s/src/test/;s/\.[jt]s$/.test.&/")" || echo {}')
# Generate tests for uncovered files
for file in $UNCOVERED; do
claude "Generate comprehensive unit tests for $file:
1. Test all exported functions
3. Mock external dependencies
4. Use Jest/Vitest syntax
5. Aim for 90%+ coverage" \
--output "${file/src/test}.test.js"
Integration Test Generation
- name : Generate Integration Tests
claude "Analyze API endpoints and generate:
1. Integration tests for all endpoints
2. Test authentication flows
--output test/integration/api.test.js
E2E Test Generation
- name : Generate E2E Tests
claude "Create Playwright E2E tests:
1. Test critical user journeys
4. Test responsive design
5. Include accessibility tests" \
Dependency Analysis
- name : Optimize Dependencies
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
claude "Analyze package.json and:
1. Identify unused dependencies
2. Find duplicate dependencies
3. Suggest lighter alternatives
4. Identify security issues
5. Recommend version updates
Generate commands to fix issues" \
--output dependency-optimization.sh
# Execute recommendations
chmod +x dependency-optimization.sh
./dependency-optimization.sh
Bundle Analysis
- name : Analyze Bundle Size
claude "Analyze webpack-stats.json:
1. Identify large modules
3. Suggest code splitting points
4. Recommend lazy loading
5. Identify tree-shaking opportunities" \
--output bundle-optimization.md
Smart Release Notes
- uses : actions/checkout@v4
- name : Generate Release Notes
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
# Get commits since last tag
LAST_TAG=$(git describe --tags --abbrev=0 HEAD^)
COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%h %s")
claude "Generate release notes from these commits:
1. Breaking Changes (if any)
4. Performance Improvements
Make it user-friendly and exciting!" \
--output release-notes.md
- name : Create GitHub Release
uses : actions/github-script@v7
const fs = require('fs');
const notes = fs.readFileSync('release-notes.md', 'utf8');
await github.rest.repos.createRelease({
owner: context.repo.owner,
tag_name: context.ref.replace('refs/tags/', ''),
name: `Release ${context.ref.replace('refs/tags/', '')}`,
Track usage per workflow
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
# Get token usage from Claude Code
TOKEN_USAGE=$(claude usage --format json)
echo "::notice title=Token Usage::$TOKEN_USAGE"
echo "$TOKEN_USAGE" >> .github/token-usage.log
TOKENS=$(echo $TOKEN_USAGE | jq '.total_tokens')
if [ $TOKENS -gt 10000 ]; then
echo "::warning title=High Token Usage::Used $TOKENS tokens"
Create usage dashboard
- name : Update Usage Dashboard
claude "Analyze .github/token-usage.log and:
1. Create usage trends chart
2. Identify high-usage workflows
4. Calculate monthly costs
5. Generate markdown report" \
--output .github/usage-report.md
CI/CD Best Practices
Cache dependencies to reduce setup time
Use concurrency groups to prevent duplicate runs
Set token limits to control costs
Use workflow conditions to run only when needed
Store artifacts for debugging
Use matrix builds for multiple configurations
Implement retry logic for transient failures
Security Guidelines
Never commit API keys - use GitHub Secrets
Limit workflow permissions to minimum required
Review third-party actions before use
Use environment protection rules for sensitive workflows
Audit workflow runs regularly
Implement branch protection rules
Complete PR Workflow
types : [ opened , synchronize , reopened ]
group : pr-${{ github.event.number }}
cache-key : ${{ steps.cache.outputs.key }}
- uses : actions/checkout@v4
run : echo "key=${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}"
- uses : actions/checkout@v4
key : ${{ needs.setup.outputs.cache-key }}
- name : Install Dependencies
- name : Claude Code Review
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
--focus "code quality, best practices, performance" \
--severity "error,warning" \
- uses : actions/checkout@v4
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
- uses : actions/checkout@v4
- uses : actions/setup-node@v4
node-version : ${{ matrix.node }}
- name : Generate Missing Tests
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
needs : [ code-quality , security , tests ]
- name : Summarize Results
ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
claude "Summarize the PR checks:
- Code quality: ${{ needs.code-quality.result }}
- Security: ${{ needs.security.result }}
- Tests: ${{ needs.tests.result }}
Provide actionable next steps" \
if [ -z "$ANTHROPIC_API_KEY" ]; then
echo "::error::ANTHROPIC_API_KEY not set"
claude "Hello" --max-tokens 10 || {
echo "::error::API key validation failed"
uses : nick-fields/retry@v2
claude review --output review.md
- name : Process Large Files
# Split review into chunks
find src -name "*.js" | \
claude review --files {} \
cat reviews/*.md > combined-review.md
Enhance your CI/CD pipeline with:
Remember: Start with simple workflows and gradually add complexity. Monitor costs closely and optimize token usage by caching results and running only on relevant changes.