Automatiser la génération du CHANGELOG avec les conventional commits
Maintenir un CHANGELOG à jour est souvent relégué au bas de la pile. On se dit “je le ferai avant la release”, et on se retrouve à fouiller dans les logs Git pour reconstituer ce qui a changé.
La solution : standardiser ses messages de commit avec les Conventional Commits, et automatiser la génération du CHANGELOG.
Le format Conventional Commit
Le principe est simple : un format structuré pour les messages de commit :
<type>(<scope>): <description> |
Les types principaux :
| Type | Usage | Version |
|---|---|---|
feat |
Nouvelle fonctionnalité | Minor |
fix |
Correction de bug | Patch |
BREAKING CHANGE |
Changement incompatible | Major |
docs |
Documentation | Aucun |
refactor |
Refactoring | Aucun |
test |
Ajout de tests | Aucun |
chore |
Maintenance | Aucun |
style |
Formatage | Aucun |
perf |
Performance | Aucun |
ci |
CI/CD | Aucun |
Exemples concrets
feat(api): ajouter le endpoint de suppression utilisateur |
Valider les messages de commit
Pour s’assurer que toute l’équipe respecte le format, on utilise commitlint :
npm install -D @commitlint/cli @commitlint/config-conventional |
// commitlint.config.js |
On l’intègre via husky pour valider avant chaque commit :
npm install -D husky |
.husky/commit-msg |
Générer le CHANGELOG automatiquement
Avec standard-version
npm install -D standard-version |
// package.json |
npm run release |
standard-version va :
- Analyser les commits depuis la dernière version tagguée
- Générer ou mettre à jour
CHANGELOG.md - Créer un commit de release
- Créer un tag git (ex:
v1.2.0)
Avec release-please (Google)
Pour une intégration CI/CD, release-please est plus puissant :
# .github/workflows/release.yml (ou GitLab CI équivalent) |
Release-please crée automatiquement une Pull Request de release avec le CHANGELOG généré. On merge la PR, et la release est publiée.
Configuration avancée
On peut personnaliser complètement le comportement :
// .versionrc.json |
Structure du CHANGELOG généré
# Changelog |
Intégration dans le pipeline GitLab CI
stages: |
Important : le pipeline doit avoir les droits d’écrire sur le dépôt. Configurez un token avec les permissions adaptées.
Versioning sémantique
Le lien entre conventional commits et semver est automatique :
Commits → Version |
Automatiser le tout
Mon pipeline final intègre tout :
stages: |
Conclusion
Les conventional commits et la génération automatique du CHANGELOG ont transformé ma façon de gérer les versions. Plus de notes de release rédigées à la main, plus de commits sans contexte, plus de recherche dans l’historique pour retrouver un changement.
Le CHANGELOG devient un document vivant, précis, et toujours à jour - généré automatiquement à chaque release.
Et vous, comment gérez-vous vos versions et votre CHANGELOG ?