cicd-pipeline
Use esta skill ao criar ou alterar qualquer arquivo de pipeline (.github/workflows/*.yml), Dockerfile, docker-compose.yml, ou configuração de lint/testes usada pela esteira de CI/CD. Garante que o pad
SKILL.md.claude/skills/cicd-pipeline/SKILL.md
GitHubSkill: CI/CD Pipeline
Aplica-se sempre que a tarefa envolver:
- Criar ou editar workflows em
.github/workflows/ - Criar ou editar
Dockerfile,Dockerfile.pythonoudocker-compose.yml - Adicionar/alterar lint (
eslint.config.js,.flake8) ou scripts de teste usados pela esteira - Configurar segurança de pipeline (secrets, scans, Dependabot, CodeQL)
Referência conceitual completa: docs/DEVOPS_GUIA.md e docs/ROTEIRO_CICD_CLAUDE_CODE.md.
Regras obrigatórias deste projeto
- Jobs separados, não um job monolítico. Lint, teste unitário, teste de integração e segurança são jobs distintos em
ci.yml, para falhar rápido e mostrar claramente o que quebrou. - Testes de integração no CI usam
services:do GitHub Actions. Os containers depostgres/redis/mongono CI são infraestrutura do runner do GitHub; localmente, odocker-compose.ymlsobe o mesmo Postgres na porta 5151. - Em workflows Docker, só build e scan são automáticos.
docker-build.ymlroda build + scan Trivy em push/PR namain; os jobspublish*edeploy*devem terif:comgithub.event_name == 'workflow_dispatch'(disparo manual). O hookpipeline-guardrail.jsbloqueia edições que removam essa trava. Não enfraqueça o scan (ex.: tirarexit-code: "1") para fazer o pipeline passar — corrija a imagem. - Nunca hardcode segredos em YAML. Use
${{ secrets.NOME_DO_SECRET }}. Se um novo secret for necessário, explique ao usuário como criá-lo emSettings → Secrets and variables → Actions— não peça para colar o valor no chat. - SQL sempre parametrizado, mesmo em scripts auxiliares de CI (ex.: scripts de seed de banco para testes) — mesma regra do
CLAUDE.mddo projeto. - Antes de alterar um workflow, explique o plano e o diff esperado, seguindo a regra geral do
CLAUDE.md.
Passos ao criar um novo workflow
- Definir o gatilho (
on:) mais restrito possível para o objetivo (ex.:pull_requestpara validação,workflow_dispatchpara ações manuais/sensíveis). - Listar os jobs e suas dependências (
needs:) — pense em qual falha deve interromper o quê. - Usar
actions/checkout@v4,actions/setup-node@v4,actions/setup-python@v5(versões fixas, não@main/@latest). - Adicionar cache de dependências (
actions/cacheou o cache nativo desetup-node/setup-python) para reduzir tempo de execução. - Rodar localmente antes de commitar: reproduzir os comandos do workflow (
npm run lint,pytest, etc.) manualmente para confirmar que passam. - Explicar como testar: qual evento dispara o workflow e onde ver o resultado (aba Actions do GitHub).
Passos ao alterar Dockerfile/docker-compose
- Validar localmente:
docker compose up --build -d, testar login/clientes/fornecedores emhttp://localhost:3000, e rodar o mesmo scan do CI:docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:0.70.0 image --severity CRITICAL,HIGH --ignore-unfixed --exit-code 1 <imagem>. 1.1. Configuração de rede vem de variáveis de ambiente (DB_HOST,DB_PORT,FORNECEDORES_HOST,FORNECEDORES_PORT,FLASK_HOST) — nunca fixelocalhostno código que roda em container. - Manter imagens base fixadas por versão (ex.:
node:24-alpine, nãonode:latest). - Multi-stage build quando fizer sentido (build separado de runtime), para imagem final menor.
- Nunca copiar
.envou segredos para dentro da imagem.
O que NÃO fazer
- Não remover ou enfraquecer o
security-guardrail.jsou opipeline-guardrail.jspara "fazer o teste passar". - Não instalar ferramentas de CI adicionais (SonarQube, Snyk, etc.) sem justificar o custo/benefício ao usuário primeiro.
- Não migrar de GitHub Actions para outra plataforma sem que o usuário peça explicitamente (use o agente
devops-engineerpara essa avaliação).