MODULO 3.7

πŸ”„ GitHub Actions e CI/CD com Claude

Integre Claude Code em pipelines de CI/CD para automatizar code review, geracao de testes, analise de seguranca e muito mais diretamente nos seus Pull Requests.

6
Topicos
45
Minutos
Avancado
Nivel
Pratico
Tipo
1

πŸš€ Claude no Pipeline

Integrar Claude em CI/CD significa automatizar tarefas cognitivas que antes exigiam intervencao humana: code review, geracao de testes, analise de seguranca.

πŸ”„ Fluxo Tipico

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Push   β”‚ β†’  β”‚  Build   β”‚ β†’  β”‚  Claude  β”‚ β†’  β”‚  Deploy  β”‚
β”‚   PR     β”‚    β”‚  Test    β”‚    β”‚  Review  β”‚    β”‚  Merge   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚
                               β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”
                               β”‚ Comentarioβ”‚
                               β”‚   no PR   β”‚
                               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • β€’ Trigger: Push ou abertura de PR
  • β€’ Analise: Claude revisa codigo alterado
  • β€’ Feedback: Comentario automatico no PR

πŸ“Š Casos de Uso em CI/CD

Code Review

Analise automatica de PRs

Test Generation

Testes para codigo novo

Security Scan

Detectar vulnerabilidades

Doc Update

Sugerir atualizacoes de docs

Changelog

Gerar release notes

Fix Suggestions

Sugerir correcoes

2

βš™οΈ Configurando GitHub Action

Vamos criar uma GitHub Action que executa Claude Code em cada Pull Request para fazer code review automatico.

.github/workflows/claude-review.yml (Action Oficial)

name: Claude Code Review

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

jobs:
  claude:
    # Responde a @claude em comentarios
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
      issues: write

    steps:
      - name: Claude Code Action
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

Review Automatico em Todo PR

name: Claude Auto Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write

    steps:
      - name: Claude Code Action
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            Analise as mudancas deste PR e forneca:
            1. Resumo das alteracoes
            2. Potenciais issues
            3. Sugestoes de melhoria

1. Configurar Secret

Repositorio β†’ Settings β†’ Secrets and variables β†’ Actions β†’ ANTHROPIC_API_KEY

2. Action Oficial

Use anthropics/claude-code-action@v1 - a action oficial da Anthropic

3. Inputs Principais

anthropic_api_key (obrigatorio), prompt (opcional), claude_args (opcional)

⚠️ Seguranca

Nunca exponha sua API key no codigo! Use sempre secrets do GitHub. Para repos publicos, considere usar actions approved apenas.

3

πŸ§ͺ Geracao Automatica de Testes

Configure uma action que gera testes automaticamente para codigo novo e abre um PR com os testes sugeridos.

.github/workflows/claude-tests.yml

name: Claude Test Generation

on:
  issue_comment:
    types: [created]

jobs:
  generate-tests:
    # Trigger: comentario "@claude generate tests"
    if: |
      github.event.issue.pull_request &&
      contains(github.event.comment.body, '@claude') &&
      contains(github.event.comment.body, 'generate tests')
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write

    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.ref }}
          fetch-depth: 0

      - name: Generate Tests with Claude
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            Identifique arquivos TypeScript alterados neste PR que nao tem testes.
            Gere testes unitarios Jest para cada um seguindo os padroes do projeto.
            Crie os arquivos de teste e faca commit das mudancas.

Fluxo de Uso

1 Reviewer adiciona label "needs-tests" no PR
2 Action roda e identifica arquivos sem testes
3 Claude gera testes para cada arquivo
4 Novo PR criado com testes para review
4

πŸ” Security Scan Automatico

Use Claude para detectar vulnerabilidades em codigo alterado e bloquear merge se encontrar issues criticas.

.github/workflows/claude-security.yml

name: Claude Security Scan

on:
  pull_request:
    paths:
      - 'src/**/*.ts'
      - 'src/**/*.js'

jobs:
  security:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Security Analysis with Claude
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            Faca analise de seguranca dos arquivos alterados neste PR.

            Busque por:
            1. SQL Injection
            2. XSS (Cross-Site Scripting)
            3. Senhas ou secrets hardcoded
            4. Exposicao de dados sensiveis
            5. Falhas de autenticacao/autorizacao

            Formato de resposta:
            ## Resumo de Seguranca
            [Resumo geral]

            ## Issues Criticas (bloquear merge)
            [Lista ou "Nenhuma"]

            ## Issues Altas
            [Lista ou "Nenhuma"]

            ## Recomendacoes
            [Sugestoes de correcao]

Bloqueio Automatico

Configure branch protection para exigir que este check passe antes do merge. Issues criticas bloqueiam automaticamente.

Branch Protection

Settings β†’ Branches β†’ Add rule
Require status checks: security
5

πŸ“ Changelog Automatico

Gere release notes automaticas baseadas nos commits e PRs mergeados desde a ultima release.

.github/workflows/claude-changelog.yml

name: Claude Changelog

on:
  release:
    types: [created]

jobs:
  changelog:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get Commits Since Last Release
        id: commits
        run: |
          LAST_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
          if [ -n "$LAST_TAG" ]; then
            COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | tr '\n' '|')
          else
            COMMITS=$(git log --pretty=format:"%s" | head -50 | tr '\n' '|')
          fi
          echo "commits=$COMMITS" >> $GITHUB_OUTPUT

      - name: Generate Changelog
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          claude --print "Gere um changelog profissional baseado nestes commits:
          ${{ steps.commits.outputs.commits }}

          Formato:
          ## Novidades
          - features novas

          ## Melhorias
          - enhancements

          ## Correcoes
          - bug fixes

          ## Breaking Changes
          - se houver

          Seja conciso e focado no usuario final." > CHANGELOG-${{ github.event.release.tag_name }}.md

      - name: Update Release Notes
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const changelog = fs.readFileSync('CHANGELOG-${{ github.event.release.tag_name }}.md', 'utf8');

            github.rest.repos.updateRelease({
              owner: context.repo.owner,
              repo: context.repo.repo,
              release_id: ${{ github.event.release.id }},
              body: changelog
            });

πŸ’‘ Dica

Use Conventional Commits (feat:, fix:, docs:) para changelogs mais precisos. Claude consegue categorizar melhor quando os commits seguem um padrao.

6

πŸ’° Otimizacao de Custos

Claude em CI/CD pode consumir muitos tokens. Implemente estrategias para controlar custos sem perder funcionalidade.

Estrategias de Economia

  • βœ“ Rodar apenas em arquivos alterados
  • βœ“ Limitar tamanho de contexto
  • βœ“ Cache de reviews similares
  • βœ“ Throttle por PR/dia
  • βœ“ Usar modelo mais barato para triagem

Exemplo: Limitar Arquivos

# Apenas arquivos < 500 linhas
for file in $FILES; do
  lines=$(wc -l < "$file")
  if [ "$lines" -lt 500 ]; then
    FILTERED="$FILTERED $file"
  fi
done

Monitoramento de Custos

# Adicionar ao workflow para tracking
- name: Log Token Usage
  run: |
    TOKENS=$(cat /tmp/claude-usage.log | grep tokens | awk '{sum+=$2} END {print sum}')
    echo "::notice::Claude tokens usados: $TOKENS"

    # Enviar para metricas (opcional)
    curl -X POST "$METRICS_ENDPOINT" \
      -d "{\"repo\": \"$GITHUB_REPOSITORY\", \"tokens\": $TOKENS, \"pr\": $PR_NUMBER}"

Estimativa de Custos

Cenario Tokens/PR PRs/Mes Custo Est.
Pequeno (review simples) ~5K 100 ~$15
Medio (review + tests) ~15K 100 ~$45
Completo (review + tests + security) ~30K 100 ~$90

πŸ“‹ Resumo do Modulo

βœ“
Claude no CI/CD automatiza tarefas cognitivas - review, testes, seguranca
βœ“
Use anthropics/claude-code-action@v1 - action oficial da Anthropic
βœ“
Geracao de testes sob demanda - label no PR dispara geracao
βœ“
Security scan pode bloquear merge - issues criticas impedem deploy
βœ“
Monitore custos de tokens - otimize para controlar gastos

Proximo Modulo:

3.8 - Projeto Final: Sistema Completo - integrando todos os conceitos em um sistema real