Essa é uma revisão anterior do documento!
Versionamento Semântico
Para padronizar as versões de nossos softwares, adotamos o padrão Semantic Versioning 2.0.0.
Objetivos
- Identificar nossos softwares através da versão.
- Trazer clareza e previsibilidade sobre a mudança de versão.
- Saber o que muda de uma versão para a outra. (Se é um bug, um feature)
- Saber se a API de uma versão é compatível com a anterior.
- Permitir automatizar o versionamento durante o CI. Veja: Nomenclatura dos Commits
Como funciona?
Esse padrão adiciona versões no formato: 1.2.3, 1.3.0, 2.0.0.
Ele permite saber:
- Se uma versão é retro-compatível com outra.
- O que muda de uma versão para outra. (Se é correção de bug ou se é feature)
Formato da versão
As versões de nossos softwares terão o seguinte formato:
<Major>.<Minor>.<Patch>
Por exemplo: 1.3.4, 1.11.0, 3.0.1.
Patch
O Patch significa correções de bugs. Sempre que houver uma correção de bug, o Patch aumenta em 1.
Exemplos:
1.3.0→1.3.12.15.23→2.15.24
Minor
O Minor, número do meio, significa implementação de feature. Sempre que houver uma implementação de feature, o Minor aumenta em 1, e o Patch reseta para 0.
Exemplos:
1.0.4→1.1.03.4.1→3.5.01.9.0→1.10.0
Major
O Major, 1⁰ número, indica que houve uma BREAKING CHANGE (mudança que quebra a compatibilidade com as versões anteriores). Sempre que houver uma Breaking Change o Major aumenta em 1, e o Minor e o Patch resetam para 0.
Exemplos:
1.3.4→2.0.04.13.72→5.0.0
Breaking Changes
Breaking changes são mudanças que quebram a retrocompatibilidade com as versões anteriores. Isso significa que, se houver outros programas que consumam da API desse programa, atualizar para a nova versão pode quebrar o programa que chama a API.
Isso pode acontecer por exemplo pois o nome do endpoint que era /get_nome/<id> virou /nome/<id>. Quebrando a retrocompatibilidade.
Retrocompatibilidade
Sobre a retrocompatibilidade, versões que possuem a mesma Major são compatíveis, e versões que possuem Major’s diferentes, não são compatíveis.
Na prática: é tranquilo atualizar da versão 7.3.0, para a 7.4.0. Já atualizar da 7.4.0 para a 8.0.0 é perigoso, e requer uma análise. Vale a pena então olhar o Changelog para entender quais foram as mudanças entre cada versão.
Automação no CI/CD
Não será necessário aplicar as tags manualmente. A Pipeline de CI/CD possui um Job de Versionamento que aplica o versionamento automaticamente, com base no nome do commit, veja: Nomenclaturas Commits