Cocogitto est un outil de gestion de commit qui facilite la rédaction de messages de commit conformes à la convention Conventional Commit. Il propose notamment une CLI pour rédiger des messages de commit structurés et standardisés, automatiser certaines tâches liées aux commits (génération de changelog, bump de versions …).

Si vous ne savez pas ce qu’est la convention Conventional Commit, je vous invite à lire le premier article de cette série à ce sujet : Conventional Commit.

Installation

Mac/Linux :

brew install cocogitto

Windows :

choco install cocogitto

Vérification de l’installation :

cog --version

cog 7.0.0

Utilisation

Pour committer

Cocogitto propose via sa CLI la possibilité de rédiger des messages de commit conformes à la convention Conventional Commit de manière interactive.

La commit cog commit remplace alors le bon vieux git commit :

cog commit feat "ma nouvelle fonctionnalite"

Initialisation d’un projet

Tout commence avec la commande cog init qui va créer un fichier de configuration cog.toml à la racine du projet.

cog init

Ce fichier de configuration permet de personnaliser le comportement de Cocogitto, notamment les types de commit autorisés, les scopes, les préfixes, etc.

Ignorer certains type du changelog

La propriété omit_from_changelog permet d’ignorer certains types de commit dans le changelog généré par Cocogitto.

Voici un exemple de configuration pour ignorer les types chore, ci et perf dans le changelog.

[commit_types]
chore = { changelog_title = "", omit_from_changelog = true }
ci = { changelog_title = "", omit_from_changelog = true }
perf = { changelog_title = "", omit_from_changelog = true }

Git hooks

Il est également possible d’utiliser Cocogitto pour gérer les git hooks, notamment le hook commit-msg qui permet de vérifier que les messages de commit respectent la convention Conventional Commit avant de les valider.

Exemple :

[git_hooks.commit-msg]
script = """#!/bin/sh
set -e
cog verify --file $1
cog check

Une fois votre hook configuré, il suffit de l’installer dans votre projet pour qu’il soit pris en compte par Git.

cog install-hook --all

Generation du changelog

Cocogitto permet de générer un changelog à partir des messages de commit conformes à la convention Conventional Commit. Admettons que nous avons les commits suivants dans notre projet :

fdeaa9d feat: Initial commit

Il suffit alors de lancer la commande suivante pour générer un changelog à partir de ces commits :

 cog changelog
## Unreleased (fdeaa9d..1ba231e)
#### Features
- Initial commit - (fdeaa9d) - Bernedotcom2312

Depuis un tag spécifique :

cog changelog --at v1.0.0

Entre deux versions :

cog changelog v1.0.0..v2.0.0

Il est également possible de personnaliser le format du changelog généré en utilisant un template personnalisé.

Exemple :

[changelog]
path = "CHANGELOG.md"
template = "remote"   # template prédéfini : "default", "remote", "full_hash"
remote = "github.com"
repository = "mon-repo"
owner = "mon-pseudo"

Bump de version

Ceci est pour moi la feature principale de cocogitto qui permet de faire du versionning sémantique (SemVer) à partir de messages de commit.

Voici comment Cocogitto calcule la prochaine version à partir des messages de commit :

  flowchart TD
    A[Calcul de la prochaine version] --> B[Exécution des pre-bump hooks]
    B --> C[Ajout des changements dans CHANGELOG.md]
    C --> D[Création d'un commit de version]
    D --> E[Création d'un tag git sur le commit de version]
    E --> F[Exécution des post-bump hooks]

La commande permettant de faire un bump de version est la suivante :

cog bump [version]

Version pouvant avoir pour valeur :

  • --auto: calcul automatique de la prochaine version à partir des messages de commit.
  • --major: incremente la version majeure.
  • --minor: incremente la version mineure.
  • --patch: incremente la version de correctif.
  • --version <version>: définit la version manuellement ( ex: cog bump –version 3.2.1).
  • --pre <metadata>: définit ou incrémente la version pré-release.
  • --build <metadata>: définit les métadonnées de build.

Par défaut seuls les commits de type fix, feat et BREAKING CHANGE sont pris en compte pour le calcul de la prochaine version.

En reprenant mon exemple de commit précédent, si je lance la commande cog bump --auto alors la prochaine version calculée sera la suivante :

v0.1.0

On vérifie ?

cog bump --auto
        Found feature commit fdeaa9d
Bumped version: ... -> 0.1.0

Le commit alors généré par Cocogitto pour le bump de version est le suivant :

1ba231e chore(version): 0.1.0

Le mot de la fin

Dans cet article nous avons vu comment installer et utiliser Cocogitto pour gérer les messages de commit, générer les changelogs et les numéros de version de manière automatisée à partir de messages de commit conformes à la convention Conventional Commit. Dans le prochain article nous verrons comment intégrer Cocogitto avec Renovate dans une chaine de CI/CD.

Sources