0 XP
Módulo 3 · Git, GitHub e Bash

Tags, releases e versionamento semântico

Intermediário 30 min+25 XPGitGitHub ReleasesSemVer

Objetivos desta aula

  • Aplicar SemVer
  • Criar tags anotadas e releases
  • Relacionar tag, imagem e deploy

Versionar não é enfeite: é o que permite dizer exatamente o que está em produção e voltar a um ponto conhecido. SemVer usa MAJOR.MINOR.PATCH, em que MAJOR indica quebra de compatibilidade, MINOR funcionalidade compatível e PATCH correção.

Tags anotadas guardam autor, data e mensagem, e são o gatilho natural de pipelines de release. A partir da tag você constrói a imagem com o mesmo identificador, de forma que a versão do código e a do artefato nunca divergem.

Evite a tag latest como referência de produção: ela muda sob seus pés e destrói a reprodutibilidade. Produção aponta para versão imutável, sempre.

1. SemVer explicado

MAJOR.MINOR.PATCH: PATCH corrige sem mudar contrato, MINOR adiciona compatível, MAJOR quebra compatibilidade. 2.4.1 → 3.0.0 avisa a quem consome que haverá trabalho de migração.

2. Tags anotadas

Use git tag -a v1.4.0 -m ...: a tag anotada guarda autor, data e mensagem, e pode ser assinada. Tags leves são só ponteiros.

3. Da tag à imagem

Em DevOps, a tag dispara o pipeline de release: build da imagem cloudshop-api:1.4.0, changelog e publicação. A mesma versão identifica código, imagem e deploy — rastreabilidade de ponta a ponta.

4. Automatizando a versão

Com Conventional Commits, ferramentas como release-please ou semantic-release calculam a próxima versão e geram o changelog sozinhas.

5. Checagem final

Você deve saber criar e publicar uma tag anotada e explicar que tipo de mudança justifica cada incremento.

Na prática

Release do CloudShop

bash

git tag -a v1.2.0 -m "feat: catalogo com filtro por material"
git push origin v1.2.0

gh release create v1.2.0 --generate-notes

git describe --tags --abbrev=0        # ultima tag alcancavel
git log v1.1.0..v1.2.0 --oneline      # o que entrou na versao

docker build -t ghcr.io/sua-org/cloudshop-api:v1.2.0 .
docker push ghcr.io/sua-org/cloudshop-api:v1.2.0

Criar e publicar release

bash

git tag -a v1.4.0 -m "v1.4.0: endpoint /orders"
git push origin v1.4.0
git describe --tags                  # v1.4.0-3-g1a2b3c <- 3 commits apos a tag
gh release create v1.4.0 --generate-notes

Por que isso importa

Sem versão imutável não existe rollback confiável nem auditoria do que está rodando.

Erro comum

Usar apenas latest e depois não conseguir reproduzir o que estava em produção ontem.

Dica de produção

Referencie a imagem por digest (sha256) em ambientes críticos: é a garantia máxima de imutabilidade.

Pergunta de entrevista

Como você garante que a versão em produção corresponde exatamente a um commit?

Glossário

SemVer
Convenção de versionamento MAJOR.MINOR.PATCH com significado definido.
digest
Hash sha256 que identifica de forma imutável o conteúdo de uma imagem.
SemVer
Versionamento semântico MAJOR.MINOR.PATCH.
tag anotada
Tag com metadados (autor, data, mensagem) armazenada como objeto no Git.
changelog
Lista das mudanças entre versões.

Conexão com o CloudShop

Publicar a v1.0.0 do CloudShop com notas de release geradas do histórico.

Quiz da aula

  1. 1. Correção de bug sem quebra de contrato incrementa qual número?

  2. 2. Você removeu um campo obrigatório da API. Qual incremento?

  3. 3. Por que a mesma versão na tag e na imagem?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima