Pipeline de Deploy
Este documento descreve o pipeline de deploy automatizado dos projetos. O processo é acionado por push na branch main e usa GitHub Actions com workflows reutilizáveis.
Visão geral
O deploy só ocorre quando há commits seguindo o padrão Conventional Commits.
Commits fora do padrão são ignorados e o pipeline encerra sem publicar nada.
Etapas
1. Create Draft Release
O semantic-release analisa os commits desde a última tag e determina a próxima versão seguindo o Semantic Versioning.
Se houver commits relevantes, ele:
- Cria a tag git (ex:
v1.4.0) - Cria uma GitHub Release em rascunho com as release notes geradas automaticamente
- Expõe a versão para as etapas seguintes
Se não houver commits convencionais, o pipeline encerra aqui sem erro.
| Tipo | Exemplo | Impacto |
|---|---|---|
fix | fix: corrigir crash no login | patch (1.0.0 → 1.0.1) |
feat | feat: adicionar sistema de gacha | minor (1.0.0 → 1.1.0) |
feat! / BREAKING CHANGE | feat!: novo protocolo de auth | major (1.0.0 → 2.0.0) |
2. Prepare Deploy Matrix
Paralelamente ao passo anterior, monta a matriz de deployments que será usada na etapa final. Se deployments_names não for informado, todos os deployments do repositório são incluídos.
3. Build and Push Docker Image
Faz o build da imagem Docker e a publica no GitHub Container Registry com a tag da versão calculada no passo 1.
ghcr.io/invasor-de-fronteiras/<app>:<versão>
Esta etapa só roda se o passo 1 identificou uma nova versão.
O build usa cache do GitHub Actions (type=gha) para acelerar builds subsequentes.
4. Publish GitHub Release
Após o build bem-sucedido, o rascunho criado no passo 1 é publicado. Isso garante que a GitHub Release só fica visível publicamente se a imagem Docker foi construída e publicada com sucesso.
5. Deploy Version to Environments
Atualiza o arquivo values.yaml do app no repositório kelbi-applications com a nova tag da imagem:
image: ghcr.io/invasor-de-fronteiras/<app>:<versão>
O ArgoCD detecta a mudança e aplica o novo deployment no cluster automaticamente.
Convenção de commits
O pipeline usa o preset conventionalcommits. Exemplos válidos:
feat: adicionar endpoint de ranking
fix: corrigir timeout na conexão com o banco
chore: atualizar dependências
docs: descrever API de gacha
refactor: extrair lógica de autenticação
Commits que não disparam release: chore, docs, style, test, ci, build.
Um commit como arrumei o bug ou wip não segue a convenção e não gera release. Se todos os commits do PR estiverem fora do padrão, nenhum deploy é feito.
Cancelamento automático
Se um novo push for feito enquanto um deploy está em andamento no mesmo branch, o deploy anterior é cancelado automaticamente e o novo começa do zero.
Fluxo do "Deploy Version to Environments"
Com as credenciais temporárias, busca no SSM Parameter Store o token com permissão de escrita no kelbi-applications e itera sobre cada deployment da matriz, atualizando a tag da imagem. O push dispara um webhook ao ArgoCD, que sincroniza o cluster automaticamente.
O role ARN da AWS é derivado do ID do repositório GitHub seguindo a convenção <github-repo-id>-github-role. O role é criado pelo repositório infra-manage-repos.