O que continua-integracao-para-go faz?
Configuração de pipeline CI/CD usando GitHub Actions para projetos Golang — testes, linting, SAST, varredura de segurança, cobertura de código, Dependabot, Renovate, GoReleaser, automação de revisão de código e pipelines de release. Use ao configurar ou melhorar a CI de um projeto Go, configurar workflows do GitHub Actions, adicionar linters ou scanners de segurança, automatizar atualizações de dependências ou adicionar gates de qualidade.
Funcionalidades
- Testes Automatizados: Execute testes unitários e de integração com cobertura.
- Linting: Use
golangci-lintpara garantir qualidade de código. - Análise Estática de Segurança (SAST): Varredura de vulnerabilidades com ferramentas como
gosec. - Varredura de Segurança: Análise de dependências e código para vulnerabilidades conhecidas.
- Cobertura de Código: Envie relatórios de cobertura para Codecov ou similar.
- Dependabot & Renovate: Automatize atualizações de dependências.
- GoReleaser: Automatize builds e releases de binários.
- Automação de Revisão de Código: Adicione bots de revisão (ex:
code-review-bot). - Gates de Qualidade: Impedir merge se testes ou linting falharem.
Pré-requisitos
- Um repositório GitHub.
- Acesso ao GitHub Actions habilitado.
- Projeto Go (recomendado Go 1.21+).
- Conhecimento básico de YAML e workflows do GitHub.
Instalação
- Copie o conteúdo do diretório
.github/workflows/para o seu repositório. - Adapte as variáveis de ambiente e parâmetros conforme necessário.
- Configure segredos no repositório (ex:
GITHUB_TOKEN,CODEGOV_TOKEN).
Estrutura de Workflows
.github/workflows/
├── test.yml # Testes e linting
├── security.yml # Varredura SAST e de dependências
├── coverage.yml # Envio de cobertura
├── dependencies.yml # Dependabot e Renovate
├── release.yml # GoReleaser e publicação
└── review.yml # Revisão automática de código
Uso
Workflow de Teste (test.yml)
name: Testes
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
- run: go test ./... -v -coverprofile=coverage.out
- run: go vet ./...
- uses: golangci/golangci-lint-action@v4
with:
version: latest
Workflow de Segurança (security.yml)
name: Segurança
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
- run: go install github.com/securego/gosec/v2/cmd/gosec@latest
- run: gosec ./...
Configuração do Dependabot
Crie dependabot.yml na raiz:
version: 2
updates:
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
Liberação com GoReleaser
Instale GoReleaser e configure .goreleaser.yaml.
Veja documentação oficial.
Boas Práticas
- Mantenha dependências atualizadas: Use Dependabot ou Renovate.
- Análise estática: Sempre rode
golangci-lintantes de merge. - Segurança: Varredura regular com
gosec. - Cobertura: Mantenha cobertura acima de 80%.
- Revisão: Use bots ou code owners para revisão.
Referências
Contribuição
Sinta-se à vontade para abrir issues ou pull requests. Todo feedback é bem-vindo!
Licença
Este projeto está sob a licença MIT.