DEV Community

Cover image for semantic-release : quand la CI gère nos versions à notre place
Joël Piazzalunga-Lerat
Joël Piazzalunga-Lerat

Posted on

semantic-release : quand la CI gère nos versions à notre place

Vous utilisez les Conventional Commits et vous commencez à apprécier la clarté de l’historique Git (si ce n’est pas le cas, voici un article pour le découvrir).

Mais vous continuez à gérer vos versions à la main, écrire le changelog, créer les tags, publier les nouvelles versions…

Et si tout ça se faisait tout seul ? C’est la promesse de semantic-release.

Par défaut, semantic-release est étroitement lié à l’écosystème npm, puisqu’il est développé en JavaScript et pensé à l’origine pour les projets Node.js mais certains plugins peuvent exister dans d’autres contextes.

Pourquoi semantic-release ?

Versionner à la main peut être une source d’erreurs multiple :

  • on oublie d’incrémenter le numéro de version
  • on modifie le changelog une fois sur deux
  • on ne sait plus si on doit passer en 1.4.2 ou 1.5.0
  • et parfois on publie sans tag

semantic-release résout tout ça automatiquement en s’appuyant sur les messages de commit (suivant la norme Conventional Commits).

En clair : vous écrivez votre code, vous faites vos commits correctement, vous mergez et le reste se fait tout seul.

Comment ça fonctionne ?

Tout part de l’analyse des commits depuis la dernière version publiée (ex : 1.0.0) :

  • un fix: déclenche une version patch (ex : 1.0.1)
  • un feat: déclenche une version mineure (ex : 1.1.0)
  • un ! ou un BREAKING CHANGE déclenche une version majeure (ex : 2.0.0)

Une fois la version déterminée, semantic-release :

  1. met à jour le changelog automatiquement
  2. crée un tag Git
  3. et publie la nouvelle version (sur npm, GitHub, GitLab, etc.)

Chaque étapes peut être supprimée ou configurée.

En somme : un cycle de release entièrement piloté par votre historique Git.

L’écosystème autour de semantic-release

semantic-release ne travaille pas seul. Il s’intègre parfaitement avec :

  • commitlint et Husky, pour vérifier la structure des commits
  • GitHub Actions, GitLab CI, ou n’importe quelle pipeline CI/CD

Une fois en place, il s’impose comme un maillon essentiel du processus d’intégration continue.

Mise en place

Si vous souhaitez l'intégrer sur votre projet, la documentation officielle est relativement bien faite.

En résumé

Avec semantic-release, vous éliminez toute la partie fastidieuse du versioning et vous rendez votre cycle de release fiable, prévisible et sans effort manuel.

En un mot : publie sans y penser.

Top comments (0)