====== Nomenclatura dos Commits ======
Este artigo descreve o padrão que adotamos para realizar a nomenclatura dos commits em nossos projetos.
Adotamos o padrão [[https://www.conventionalcommits.org/pt-br/v1.0.0/|Conventional Commits]], o qual inicia o commit com um prefixo como ''%%fix:%%'', ''%%feat:%%'', ''%%docs:%%'' para identificar o tipo da mudança.
Para mais informações, veja também o [[https://github.com/angular/angular/blob/main/contributing-docs/commit-message-guidelines.md|Guia de Commits do Angular]] que também usa o [[https://www.conventionalcommits.org/pt-br/v1.0.0/|Conventional Commits]].
===== Objetivos =====
* Automatizar o versionamento de nossos projetos
* Automatizar a geração do Changelog
* Tornar o histórico de commits mais legível
* Padronizar a comunicação entre a equipe
==== Automatizar o versionamento ====
É importante utilizar esse padrão pois os repositórios possuem (devem possuir) um [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates/-/tree/main/templates/versioning|Job de Versionamento]] na Pipeline de CI/CD. Esse job lê o nome dos commits e gera automaticamente a tag da versão do repositório no padrão de [[:pres:gerti:devops:informacoes:versionamento_semantico|]].
{{:pres:gerti:devops:informacoes:20260420083356.png?nolink&1281x183}}
===== Sintaxe dos Commits =====
Esta é a sintaxe dos commits que o [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates/-/tree/main/templates/versioning|Job de Versionamento]] está configurado para entender
(): [#]
* ''%%%%'': **Obrigatório.** Refere-se ao tipo da alteração: se ele corrige um bug é um ''%%fix%%'', se adiciona um feature, é um ''%%feat%%''. Veja: [[#Quais%20Tipos%20de%20Commits%20existem?|Quais Tipos de Commits existem?]]
* ''%%%%'': **Opcional.** Descreve qual módulo do sistema foi alterado
* ''%%%%'': **Obrigatório.** Descrição do o que o seu commit faz. Inicie sempre com verbos no **presente do indicativo**, ex.: ''%%corrige%%'', ''%%altera%%'', ''%%implementa%%'', ''%%refatora%%'', ''%%adiciona%%''.
* ''%%[#]%%'': **Opcional.** Este é o ID da task do Redmine caso seu commit esteja relacionado. Ex: ''%%#39042%%''
==== Quais Tipos de Commits existem? ====
Para o campo ''%%%%'', há as seguintes opções:
^Tipo ^Descrição ^Versão ^Roda a pipeline?^
|**build** |Mudanças que afetam o sistema de build (Dockerfile) ou dependências externas (requirements.txt)|Não altera |Sim |
|**ci** |Alterações na pipeline de CI/CD |Não altera |Sim |
|**docs** |Alterações na Documentação |Não altera |Não |
|**feat** |Um feature novo (alterações que adicionam funcionalidade) |Aumenta a Minor|Sim |
|**fix** |Uma correção de bug (alteração que corrige funcionalidade) |Aumenta o Patch|Sim |
|**perf** |Uma mudança no código que melhora a performance |Aumenta a Minor|Sim |
|**refactor**|Uma mudança de código que nem corrige bugs, nem adiciona features. Apenas Refatoração. |Não altera |Sim |
|**test** |Adição de novos testes ou correção de testes existentes |Não altera |Sim |
> **Dica:** Commits que começam ''%%docs:%%'' não disparam a pipeline. Caso não queria disparar a pipeline, pode usá-lo.
===== Exemplos =====
Veja como exemplo um histórico de commits de um projeto fictício para entender como que
^Versão Atual^Nome do Commit ^Nova Versão^Tipo de Alteração ^
|1.2.4 |fix: Corrige a formatação do parser markdown |1.2.5 |Altera a versão de Patch|
|1.2.5 |feat: Adiciona comando de pull para baixar novas páginas #37093 |1.3.0 |Altera a versão Minor |
|1.3.0 |docs(comandos): Cria sessão explicando como usar o comando de pull|1.3.0 |Versão se mantem igual |
===== Como funciona? =====
Exemplo com este [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates/-/commit/57a578138253f7e1c5c1382984234c9d1b269daf|commit]] feito no [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates|TCE.Pipelines]]:
- Encontrei um bug no Job de Versionamento.
- Corrigi o erro em minha máquina, testei e estou pronto para commitar.
- Como a alteração é uma **correção de bug** no módulo **versioning**, o commit se chamou: ''%%fix(versioning): corrige output do NEXT_VERSION%%''.
- Fiz push. No Gitlab, o Job de Versionamento [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates/-/jobs/23380|leu o nome do commit]] entendeu que é um ''%%fix%%'', e criou uma nova tag nesse commit. A tag anterior era ''%%3.0.0%%'', então ele aumentou para ''%%3.0.1%%''.
- Após isso, o [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates/-/tree/main/templates/versioning|Job de Versionamento]] também gerou um [[https://gitsource.tce.go.gov.br/GER-TI/tce.kubernetes/tce.templates/-/releases#3.0.1|changelog]] com as alterações.
===== Dica: Iniciar descrição do commit com o presente do indicativo =====
Por convenção, inicie a **Descrição** do commit com **verbos no presente do indicativo**. A descrição deve indicar o que o commit **faz**. Exemplos:
* fix: **corrige** a formatação do parser markdown
* feat: **adiciona** comando de pull para baixar novas páginas
A intenção é facilitar a leitura do histórico de commits, e dos changelogs.
====== Mais informações ======
Para informações completas da sintaxe dos commits e versionamento semântico: [[https://semver.org/|Versionamento Semântico]] e [[https://github.com/angular/angular/blob/main/contributing-docs/commit-message-guidelines.md|guia de commits do Angular]].