Tags, releases e versionamento semântico
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.0Criar 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-notesPor 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. Correção de bug sem quebra de contrato incrementa qual número?
2. Você removeu um campo obrigatório da API. Qual incremento?
3. Por que a mesma versão na tag e na imagem?
Minhas anotações
Salvo automaticamente neste navegador.