Guia de Contribuição
Obrigado por querer contribuir com o terraview! Este guia explica como participar do projeto.
Código de Conduta
Este projeto adota o Contributor Covenant. Ao contribuir, você concorda em seguir estas diretrizes.
Como contribuir
Reportando bugs
- Verifique se o bug ainda não foi reportado nas issues
- Abra uma nova issue usando o template Bug Report
- Inclua: versão (
terraview version), OS, passos para reproduzir e saída esperada vs. obtida
Sugerindo features
- Abra uma issue usando o template Feature Request
- Descreva o problema que a feature resolve (não apenas a solução)
- Se possível, inclua exemplos de uso e casos de borda
Enviando Pull Requests
- Fork o repositório
- Crie um branch a partir de
main: - Faça suas mudanças seguindo os padrões abaixo
- Rode os testes:
- Commit seguindo Conventional Commits
- Abra o PR com o template preenchido
Padrões de código
Estilo Go
- Siga as convenções do
gofmtegolangci-lint - Funções públicas devem ter godoc
- Erros devem usar
%wpara wrapping (não%v) - Prefira
errors.Is/errors.Asa comparação direta
Conventional Commits
Os commits devem seguir o formato:
Tipos aceitos:
| Tipo | Quando usar |
|---|---|
feat |
Nova funcionalidade |
fix |
Correção de bug |
docs |
Apenas documentação |
refactor |
Refatoração sem mudança de comportamento |
test |
Adicionar ou corrigir testes |
perf |
Melhoria de performance |
ci |
Mudanças no pipeline de CI/CD |
chore |
Manutenção, deps, configurações |
build |
Mudanças no sistema de build |
Exemplos:
feat(ai): adicionar provider gemini-cli via subprocess
fix(selector): corrigir contagem de linhas no eraseLines
docs(readme): atualizar exemplos de instalação para Linux
Versionamento
Commits com feat: geram minor version bump. fix: gera patch. BREAKING CHANGE: no footer gera major version bump.
Configurar ambiente de desenvolvimento
# Clonar
git clone https://github.com/leonamvasquez/terraview.git
cd terraview
# Dependências
go mod download
# Compilar e instalar localmente
make install
# Rodar testes
make test
# Lint
make lint
# Coverage
make coverage
Estrutura do projeto
cmd/ # Comandos CLI (cobra)
internal/
ai/ # Providers de IA e registry
parser/ # Parser de planos Terraform
rules/ # Motor de regras e findings
scanner/ # Integração com scanners externos
config/ # Configuração e persistência
output/ # Formatadores de saída
...
prompts/ # Templates de prompts para IA
profiles/ # Perfis de severidade configuráveis
examples/ # Exemplos de planos Terraform
Adicionando um novo provider de IA
- Crie
internal/ai/providers/meu_provider.go - Implemente a interface
ai.Provider(Name, Validate, Analyze) - Registre via
init()comai.Register(...) - Adicione testes em
meu_provider_test.go - Documente no README na seção de providers
Veja internal/ai/providers/gemini.go como referência.
Testes
- Todo novo código deve ter testes unitários
- Use table-driven tests para cobrir múltiplos casos
- Mocks para dependências externas (HTTP, exec, filesystem)
- Fuzz tests para parsers e inputs não confiáveis
Dúvidas
Abra uma Discussion no GitHub.