Skip to main content

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.

danger

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.

Tipos de commit e impacto na versão
TipoExemploImpacto
fixfix: corrigir crash no loginpatch (1.0.01.0.1)
featfeat: adicionar sistema de gachaminor (1.0.01.1.0)
feat! / BREAKING CHANGEfeat!: novo protocolo de authmajor (1.0.02.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.

Cache

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.

Commits fora do padrão

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.