Todos posts

Conventional Commits

Segundo o Google, Convenção é:

acordo sobre determinada atividade, assunto etc., que obedece a entendimentos prévios e normas baseadas na experiência recíproca.

Partindo dessa definição, Conventional Commits nada mais são que um conjunto de convenções para a criação de mensagens de commits. Seguir uma convenção de commit - ou padrão - pode se traduzir em deixar outras pessoas rapidamente familiarizadas com o que houve naquele momento e quais os problemas, features e até mesmo Breaking Changes ocorreram a partir daquela alteração adiante.

As regras definidas nesta convenção auxiliam também na criação de ferramentas automatizadas, tais como geradores de CHANGELOG, automatizadores de Release e outros toolings.


Anatomia de um Commit

Uma mensagem de commit deve seguir um padrão definido de anatomia, sendo ele:

<tipo>[escopo?]: <descrição>

[corpo da mensagem?]

[rodapé?]

onde cada um dos campos possuem funções específicas:

Tipo:

  • feat (uma nova funcionalidade)
  • fix (correção de bug)
  • docs (alterações relacionadas a documentação do projeto)
  • style (formatação de código, porém sem alteração)
  • refactor (refatoração de funções ou métodos)
  • test (alterações relacionadas a testes desde que não haja alteração de código da aplicação em si)
  • chore (arquivos de configuração do projeto como .gitignore)

Escopo (Opcional):

Se destina a trazer uma informação rápida quando o commit se destina à um escopo específico, tais quais:

  • init
  • runner
  • watcher
  • config
  • web-server
  • proxy
  • lang
  • parser
  • middleware

Descrição:

Ela deve ser breve e descrever em poucas palavras o que está acontecendo naquele commit. Outro detalhe importante é descrever no presente imperativo, como “change” e não “changed” ou “changes”. Além de não ser necessário iniciar as sentenças com letras maiúsculas, assim como não é necessário colocar o ponto(.) no final da frase.

Corpo da Mensagem (Opcional):

Ela se geralmente se torna necessário utilizar o corpo da mensagem quando precisamos detalhar mais sobre as alterações realizadas no commit, porém em grande parte das vezes, apenas a descrição se torna necessária.

Rodapé (Optional):

O rodapé DEVE conter apenas informações adicionais ao commit, como link para o pull-request ou issue, ou até informar quando alguma modificação altera quebra alguma compatibilidade.


Isso é um breve resumo sobre o que seria a convenção de Commits, que teve toda sua especificação baseada em outra convenção, a Semantic Version (https://semver.org/).

Para mais informações e detalhamento sobre a especificação, segue um dos links oficiais do projeto: https://www.conventionalcommits.org/en/v1.0.0/.

E para adicionar essas convenção no seu projeto Javascript, existe uma lib ja pronta para seguir todas essas regras: https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional

Espero que seja util, e até mais ver!