Processo de Review
Como funciona a revisão de Pull Requests no OitoPorOito.
Visão Geral
O processo de review garante qualidade, consistência e alinhamento com os objetivos do projeto.
Fluxo de Review
graph TD
A[Abrir PR] --> B[CI/CD Automático]
B --> C{Testes Passam?}
C -->|Não| D[Corrigir e Atualizar]
D --> B
C -->|Sim| E[Revisão por Mantainer]
E --> F{Aprovado?}
F -->|Não| G[Solicitar Mudanças]
G --> D
F -->|Sim| H[Merge]
H --> I[Deploy Automático]
Tipos de Review
1. Review Automático (CI/CD)
Executado automaticamente em cada PR:
Checks: - ✅ Build compila sem erros - ✅ Todos os testes passam - ✅ Linting sem erros - ✅ Coverage não diminui - ✅ Bundle size não aumenta significativamente
Ferramentas: - GitHub Actions - ESLint - Prettier - Vitest - Bundlesize
2. Review por Pares
Realizado por maintainers do projeto:
O que reviewers avaliam:
Funcionalidade
- ✅ Código faz o que promete
- ✅ Edge cases tratados
- ✅ Sem quebrar funcionalidades existentes
Qualidade do Código
- ✅ Legível e compreensível
- ✅ Segue guia de estilo
- ✅ Sem duplicação desnecessária
- ✅ Nomes descritivos
Arquitetura
- ✅ Estrutura apropriada
- ✅ Componentes reutilizáveis
- ✅ Separação de responsabilidades
Testes
- ✅ Testes adequados incluídos
- ✅ Casos importantes cobertos
- ✅ Testes são legíveis
Performance
- ✅ Sem operações custosas desnecessárias
- ✅ Renderizações otimizadas
- ✅ Memoização quando apropriado
Segurança
- ✅ Input validation
- ✅ Sem XSS vulnerabilities
- ✅ Secrets não expostos
Documentação
- ✅ README atualizado se necessário
- ✅ JSDoc em funções complexas
- ✅ Comments onde apropriado
Timeline Esperado
| Tipo de PR | Tempo de Primeira Resposta | Tempo até Merge |
|---|---|---|
| Typo/Docs | 1-2 dias | 2-3 dias |
| Bug simples | 2-3 dias | 3-5 dias |
| Feature pequena | 3-5 dias | 5-10 dias |
| Feature grande | 1 semana | 2-4 semanas |
Nota
Estes são tempos estimados. PRs complexos podem levar mais tempo.
Estados de Review
🔴 Changes Requested
Mudanças são necessárias antes do merge.
O que fazer: 1. Leia o feedback cuidadosamente 2. Faça as mudanças solicitadas 3. Responda aos comentários 4. Push das mudanças (PR atualiza automaticamente) 5. Re-solicitar review
# Após fazer mudanças
git add .
git commit -m "fix: ajustes conforme review"
git push origin sua-branch
🟡 Commented
Feedback dado, mas não bloqueante.
O que fazer: - Considere as sugestões - Implemente o que faz sentido - Responda explicando decisões
🟢 Approved
PR aprovado! Pronto para merge.
Próximos passos: - Maintainer faz merge - Branch pode ser deletada - Deploy automático inicia
Respondendo a Feedback
✅ Boas Práticas
> Suggestion: Use useMemo aqui para otimizar
Boa ideia! Implementei. Commits: abc123
---
> Typo: "recieve" deve ser "receive"
Corrigido. Obrigado!
---
> Pergunta: Por que escolheu este approach?
Considerei X e Y, mas escolhi Z porque [razão].
Se você acha que há uma abordagem melhor, estou aberto!
❌ Evite
> Este código está confuso
Whatever, funciona. ❌
---
> Faltam testes
Muito trabalho, vou fazer depois. ❌
---
> Considere refatorar esta função
Está bom do jeito que está. ❌
Aprovação de PRs
Quem Pode Aprovar?
- Maintainers: Podem aprovar e fazer merge
- Contributors ativos: Review é apreciado mas não suficiente
Critérios de Aprovação
Um PR é aprovado quando:
- ✅ CI passa: Todos os checks automáticos
- ✅ Review aprovado: Pelo menos 1 maintainer
- ✅ Conflitos resolvidos: Sem merge conflicts
- ✅ Discussões resolvidas: Todos os comentários endereçados
Merge
Estratégia
OitoPorOito usa Squash and Merge:
Vantagens: - Histórico limpo - Cada feature = 1 commit - Facilita rollback
Após o Merge
- Branch deletada: Automaticamente após merge
- Deploy: CI/CD faz deploy para staging
- Notificação: Contribuidor é notificado
- Crédito: Aparece em CONTRIBUTORS.md
Lidar com Mudanças Solicitadas
Exemplo de Feedback
**Changes Requested por @maintainer**
1. Adicionar testes para função `calculateRating()`
2. Extrair lógica duplicada em função reutilizável
3. Atualizar documentação com novo parâmetro
Como Responder
1. Fazer as Mudanças
# Implementar mudanças
git add .
git commit -m "test: adiciona testes para calculateRating"
git commit -m "refactor: extrai lógica duplicada"
git commit -m "docs: atualiza documentação"
git push origin feature/rating-system
2. Responder aos Comentários
✅ 1. Testes adicionados - commit abc123
✅ 2. Refatorado - commit def456
✅ 3. Docs atualizadas - commit ghi789
Pronto para re-review!
3. Re-solicitar Review
Click "Re-request review" no GitHub.
Resolver Conflitos
Se sua branch tem conflitos com main:
# Atualizar main local
git checkout main
git pull origin main
# Voltar para sua branch
git checkout sua-branch
# Rebase (recomendado)
git rebase main
# Ou merge (alternativa)
git merge main
# Resolver conflitos manualmente
# Depois:
git add .
git rebase --continue
# ou
git commit
# Force push (necessário após rebase)
git push origin sua-branch --force-with-lease
Review de PRs Grandes
Para PRs com muitas mudanças:
Como Autor
- Divida se possível: Múltiplos PRs menores
- Explique contexto: Descrição detalhada
- Destaque áreas chave: Onde focar review
- Oferece walkthrough: Video ou call se necessário
Como Reviewer
- Peça divisão: Se muito grande
- Review incremental: Uma área por vez
- Foque no importante: Lógica > style pequenos
- Marque como viewed: Arquivos já revisados
Auto-Review
Antes de pedir review, faça seu próprio:
Checklist
- [ ] Li o diff completo
- [ ] Testei localmente
- [ ] Verifiquei console (sem warnings)
- [ ] Rodei testes
- [ ] Checklist do PR preenchido
- [ ] Descrição é clara
- [ ] Screenshots se aplicável
Ferramentas
# Ver mudanças
git diff main...sua-branch
# Review no GitHub
# Use "Files changed" tab antes de pedir review
Etiqueta
✅ Faça
- Seja respeitoso e construtivo
- Elogie bom código
- Explique o "porquê" das sugestões
- Ofereça soluções, não só problemas
- Use "nit:" para sugestões não-bloqueantes
❌ Evite
- Críticas pessoais
- Ser condescendente
- Bike-shedding (debater detalhes triviais)
- Aprovar sem ler
- Bloquear sem razão
Exemplos de Comentários
Bons Comentários
💡 Consider using `useMemo` here to avoid recalculating on every render:
```js
const validMoves = useMemo(() => {
return chess.moves();
}, [position]);
This would improve performance, especially for complex positions.
🎉 Nice implementation of the rating system! Clean and well-tested.
nit: Could add a JSDoc comment explaining the algorithm.
❓ Why did you choose useReducer instead of useState here?
Just curious about the reasoning.
### Comentários a Melhorar
```markdown
❌ This is wrong. ← Não explica porquê
❌ Por que você não fez X? ← Tom acusatório
❌ Isso é muito complexo, simplifique. ← Não oferece solução
✅ This logic is a bit complex. What do you think about
extracting it to a separate function? Something like:
function validateMove(from, to) {
// logic here
}
Would make it more testable too!
Recursos
Contato
Dúvidas sobre o processo de review?
- 💬 GitHub Discussions
- 📧 Email: dev@oitoporoito.com
- 💡 Como Contribuir