Skip to content
Latchkey

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.

Guias relacionados