← Voltar ao Blog

Code review com IA no GitHub Actions: 3 estágios

Quase todo mundo que mostra claude-code-action ou coderabbitai/ai-pr-reviewer no .github/workflows/ esquece a parte chata: o que acontece quando o próprio pipeline falha em silêncio. O PR passa, o status fica verde, e três semanas depois você descobre que o job de IA nunca rodou porque o needs: apontava para um workflow que nem existe mais.

Vou mostrar o pipeline em 3 estágios que uso no meu harness de code review, e as 4 armadilhas que fazem ele silenciar. Os códigos saem do capítulo 11 do meu livro sobre code review com harness. Os números de arquitetura (300 linhas, 80% de cobertura) são thresholds de projeto, não medição de time em produção — rode no seu repo antes de adotar.

Pipeline em 3 estágios: quality gate, revisão por IA, revisão humana

Os 3 estágios

O pipeline tem uma regra simples: nada chega no estágio seguinte se o anterior reprovou. Se a IA revisar código com erro de tipo, você está discutindo a cor do papel de parede numa casa com a parede caindo.

Estágio 1: Quality Gate (sem IA, sem humano)

Prettier, ESLint, type check, testes com cobertura. Tudo que uma máquina decide em segundos:

# .github/workflows/quality-gate.yml
name: Quality Gate
on:
  pull_request:
    branches: [main, develop]

jobs:
  quality:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'
      - run: npm ci
      - name: Prettier
        run: npx prettier --check .
      - name: ESLint
        run: npx eslint . --max-warnings 0
      - name: Type Check
        run: npx tsc --noEmit
      - name: Tests
        run: npm test -- --coverage
      - name: Coverage Check
        run: |
          COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')
          if (( $(echo "$COVERAGE < 80" | bc -l) )); then
            echo "Cobertura abaixo de 80%: $COVERAGE%"
            exit 1
          fi

Este estágio não existe para pegar bug. Existe para tirar da pauta da IA tudo que a IA faria mal. Formatação, imports não usados, any espalhado, promises soltas. Se a IA comenta “isso aqui não está formatado”, o pipeline falhou antes dela abrir a boca.

Estágio 2: Revisão por IA (só se o estágio 1 passou)

Aqui entram anthropics/claude-code-action, o CodeRabbit (plano hospedado), ou o snyk/actions/node para dependência vulnerável. O ponto não é qual IA. O ponto é o needs::

# .github/workflows/ai-review.yml
name: AI Review
on:
  pull_request:

jobs:
  ai-review:
    needs: [quality]
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

Se o quality-gate reprovar, o ai-review nem roda. Isso parece óbvio, até você olhar workflows que colocam a IA em paralelo com o quality gate “para dar feedback mais rápido”. O feedback mais rápido é o PR voltando com 50 comentários da IA sobre coisas que o prettier --write resolveria num Ctrl+S.

Estágio 3: Humano (só se estágio 2 passou)

Atribuição automática de revisor, com skipKeywords: [WIP, Draft]:

# .github/auto-assign.yml
reviewers:
  - kenimo49
  - team-member-1
numberOfReviewers: 1
skipKeywords:
  - WIP
  - Draft

O humano decide design, nomes, trade-off arquitetural. Não revisa indentação. Não revisa se o nome de variável é userData ou user. Essas coisas morreram no estágio 1.

As 4 armadilhas que fazem o pipeline silenciar

Agora a parte que ninguém mostra. O pipeline acima funciona se você não cair em nenhuma destas:

1. needs: apontando para job que não existe mais. Você renomeia quality-gate para quality e esquece de atualizar o ai-review.yml. O GitHub Actions não grita. O workflow fica em pending eternamente, mas o status check “passa” porque o workflow nem foi acionado. Mitigação: rode act -l localmente antes de merge, ou use required status checks no branch protection apontando para o job name exato.

2. CI falhou, ninguém foi notificado. Workflow default do GitHub Actions não manda notificação por falha em PR de outra pessoa. Só o autor do PR vê. Reviewer olha ”✓ All checks passed” (porque o job nem rodou) e aprova. Mitigação: adicione if: failure() + Slack/Discord webhook no último step, e marque o workflow como required no branch protection — se não rodar, o PR não funde.

3. Secrets em workflow de fork. secrets.ANTHROPIC_API_KEY não é passado para workflows de forks (comportamento correto, para evitar vazamento). Mas se seu ai-review.yml roda em pull_request em vez de pull_request_target, PRs de contribuidores externos recebem review silenciosamente sem IA. Mitigação: detecte a ausência da chave logo no início e marque o job como skipped com mensagem explícita, ou use pull_request_target com cuidado (código do PR não é confiável).

4. Workflow de PR size que só comenta. actions/github-script que avisa “PR grande (720 linhas)” mas não bloqueia nada. Em três meses, aquele aviso vira ruído. Ninguém lê. Mitigação: se o PR passa de 300 linhas, falhe o status check e exija label large-pr-approved manual. Comentário sem consequência é só poluição.

O estágio zero: hooks pre-commit

Antes do pipeline, tem o estágio zero que roda na máquina do dev: husky + lint-staged. Já escrevi sobre isso em Camada 1 do harness de code review: 3 hooks pre-commit cortam 40%. O pipeline do GitHub Actions é a rede de segurança para quando o pre-commit foi pulado com --no-verify, mas não deve ser a primeira linha. Se tudo chegar no CI, o CI vira o gargalo.

A tabela mental é essa:

EstágioOnde rodaO que decide
0Local (pre-commit)Format, lint rápido
1GitHub ActionsFormat, lint completo, type, test, coverage
2GitHub ActionsLógica, security scan, design por IA
3HumanoDesign, arquitetura, naming

Se seu PR não passou do estágio 0, o estágio 3 nem fica sabendo que você existia.

E a questão do custo

anthropics/claude-code-action roda contra a API da Anthropic. CodeRabbit tem free tier limitado + pago. GitHub Copilot code review entra nos planos pagos do Copilot (Pro, Business, Enterprise). A escolha depende de onde seu time já tem contrato — o custo real de rodar Claude Code e ChatGPT Codex lado a lado está detalhado em ChatGPT Codex vs Claude Code Pricing: 90d Bill (em inglês). O ponto é: tenha uma IA no estágio 2. Qual, importa menos do que ter.

E se você vai montar o pipeline, monte o alerta junto. Pipeline que falha em silêncio é pior que pipeline que não existe — no segundo caso, pelo menos você sabe que não tem rede.


ken imoto · WebRTC & Voice AI engineer · kenimoto.dev · TabNews

Revisão de Código com Harness Engineering Livro relacionado Revisão de Código com Harness Engineering Revisão de código em três camadas | hooks + IA + humano · AGENTS.md · CodeRabbit · GitHub Actions Ver a página do livro →