O que é versionamento semântico?
Versionamento semântico é um esquema de versionamento em que um número de versão como 2.4.1 codifica que tipo de mudança ele representa.
Um número de versão pode ser arbitrário, ou pode carregar significado. O versionamento semântico (SemVer) torna o número significativo: ao lê-lo, você pode dizer se uma atualização é uma correção de bug segura, uma feature compatível com versões anteriores, ou uma breaking change.
O esquema major.minor.patch
Uma versão SemVer tem três partes: MAJOR.MINOR.PATCH. Você incrementa MAJOR para mudanças incompatíveis e breaking; MINOR para novas features compatíveis com versões anteriores; e PATCH para correções de bug compatíveis com versões anteriores. Então 2.4.1 significa versão major 2, com quatro adições de feature e uma patch desde a última minor.
O que cada incremento sinaliza
- PATCH (2.4.0 -> 2.4.1): uma correção de bug, segura de adotar.
- MINOR (2.4.1 -> 2.5.0): novas features, ainda compatíveis com versões anteriores.
- MAJOR (2.5.0 -> 3.0.0): uma breaking change; revise antes de atualizar.
Um exemplo
Uma biblioteca na 1.2.0 corrige um bug e lança a 1.2.1, usuários podem atualizar sem pensar. Ela então adiciona uma nova feature opcional e lança a 1.3.0, ainda segura. Mais tarde ela remove uma função descontinuada, uma breaking change, então lança a 2.0.0, sinalizando que usuários devem checar seu código antes de atualizar.
Por que importa para dependências
Quando seu projeto depende de muitas bibliotecas, o SemVer permite que você expresse quais atualizações aceitar automaticamente. Uma regra como "aceitar patches e minors mas não majors" depende inteiramente de bibliotecas seguirem o SemVer honestamente. É isso que torna as atualizações automáticas de dependências seguras em vez de imprudentes.
Automatizando isso
Muitos times automatizam incrementos de versão com base em mensagens de commit: um commit de fix incrementa a patch, uma feature incrementa a minor, e um marcador de breaking change incrementa a major. Isso remove a adivinhação humana e mantém as versões verdadeiras, que é do que consumidores downstream dependem.
Principais conclusões
- SemVer codifica o tipo de mudança como MAJOR.MINOR.PATCH.
- Major significa breaking, minor significa novas features, patch significa correções.
- Ele permite que ferramentas de dependência aceitem atualizações seguras automaticamente.