<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joël Piazzalunga-Lerat</title>
    <description>The latest articles on Forem by Joël Piazzalunga-Lerat (@jpiazzal).</description>
    <link>https://forem.com/jpiazzal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F617670%2Fd15b16d8-091a-4f59-b6e1-6aee5a5920db.jpeg</url>
      <title>Forem: Joël Piazzalunga-Lerat</title>
      <link>https://forem.com/jpiazzal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jpiazzal"/>
    <language>en</language>
    <item>
      <title>semantic-release : quand la CI gère nos versions à notre place</title>
      <dc:creator>Joël Piazzalunga-Lerat</dc:creator>
      <pubDate>Mon, 17 Nov 2025 10:05:45 +0000</pubDate>
      <link>https://forem.com/jpiazzal/semantic-release-quand-la-ci-gere-nos-versions-a-notre-place-2nd7</link>
      <guid>https://forem.com/jpiazzal/semantic-release-quand-la-ci-gere-nos-versions-a-notre-place-2nd7</guid>
      <description>&lt;p&gt;Vous utilisez les &lt;strong&gt;Conventional Commits&lt;/strong&gt; et vous commencez à apprécier la clarté de l’historique Git (si ce n’est pas le cas, &lt;a href="https://dev.to/jpiazzal/conventional-commits-un-premier-pas-vers-lautomatisation-3l5d"&gt;voici un article pour le découvrir&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Mais vous continuez à gérer vos versions à la main, écrire le changelog, créer les tags, publier les nouvelles versions…&lt;/p&gt;

&lt;p&gt;Et si tout ça se faisait tout seul ? C’est la promesse de &lt;a href="https://github.com/semantic-release/semantic-release" rel="noopener noreferrer"&gt;semantic-release&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pourquoi semantic-release ?
&lt;/h2&gt;

&lt;p&gt;Versionner à la main peut être une source d’erreurs multiple :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;on oublie d’incrémenter le numéro de version&lt;/li&gt;
&lt;li&gt;on modifie le changelog une fois sur deux&lt;/li&gt;
&lt;li&gt;on ne sait plus si on doit passer en &lt;code&gt;1.4.2&lt;/code&gt; ou &lt;code&gt;1.5.0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;et parfois on publie sans tag&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;semantic-release&lt;/strong&gt; résout tout ça automatiquement en s’appuyant sur les messages de commit (suivant la norme Conventional Commits).&lt;/p&gt;

&lt;p&gt;En clair : vous écrivez votre code, vous faites vos commits correctement, vous mergez et le reste se fait tout seul.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comment ça fonctionne ?
&lt;/h2&gt;

&lt;p&gt;Tout part de l’analyse des commits depuis la dernière version publiée (ex : &lt;code&gt;1.0.0&lt;/code&gt;) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;un &lt;code&gt;fix:&lt;/code&gt; déclenche une version &lt;strong&gt;patch&lt;/strong&gt; (ex : &lt;code&gt;1.0.1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;feat:&lt;/code&gt; déclenche une version &lt;strong&gt;mineure&lt;/strong&gt; (ex : &lt;code&gt;1.1.0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;!&lt;/code&gt; ou un &lt;code&gt;BREAKING CHANGE&lt;/code&gt; déclenche une version &lt;strong&gt;majeure&lt;/strong&gt; (ex : &lt;code&gt;2.0.0&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une fois la version déterminée, semantic-release :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;met à jour le changelog automatiquement&lt;/li&gt;
&lt;li&gt;crée un tag Git&lt;/li&gt;
&lt;li&gt;et publie la nouvelle version (sur npm, GitHub, GitLab, etc.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Chaque étapes peut être supprimée ou configurée.&lt;/p&gt;

&lt;p&gt;En somme : &lt;strong&gt;un cycle de release entièrement piloté par votre historique Git&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  L’écosystème autour de semantic-release
&lt;/h2&gt;

&lt;p&gt;semantic-release ne travaille pas seul. Il s’intègre parfaitement avec :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;commitlint&lt;/strong&gt; et &lt;strong&gt;Husky&lt;/strong&gt;, pour vérifier la structure des commits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt;, &lt;strong&gt;GitLab CI&lt;/strong&gt;, ou n’importe quelle pipeline CI/CD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une fois en place, il s’impose comme un maillon essentiel du processus d’intégration continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mise en place
&lt;/h2&gt;

&lt;p&gt;Si vous souhaitez l'intégrer sur votre projet, &lt;a href="https://semantic-release.gitbook.io/semantic-release/usage/getting-started" rel="noopener noreferrer"&gt;la documentation officielle&lt;/a&gt; est relativement bien faite.&lt;/p&gt;

&lt;h2&gt;
  
  
  En résumé
&lt;/h2&gt;

&lt;p&gt;Avec semantic-release, vous éliminez toute la partie fastidieuse du versioning et vous rendez votre cycle de release &lt;strong&gt;fiable, prévisible et sans effort manuel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En un mot : &lt;strong&gt;publie sans y penser.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>cicd</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Conventional Commits : un premier pas vers l’automatisation</title>
      <dc:creator>Joël Piazzalunga-Lerat</dc:creator>
      <pubDate>Fri, 04 Jul 2025 15:11:14 +0000</pubDate>
      <link>https://forem.com/jpiazzal/conventional-commits-un-premier-pas-vers-lautomatisation-3l5d</link>
      <guid>https://forem.com/jpiazzal/conventional-commits-un-premier-pas-vers-lautomatisation-3l5d</guid>
      <description>&lt;p&gt;« Fix truc », « maj test »... Vous aussi, vous vous demandez parfois ce que vous vouliez dire il y a trois semaines ? Ou vous tombez sur un « some updates » sans vraiment savoir ce qui a changé ?&lt;/p&gt;

&lt;p&gt;Les &lt;em&gt;commits conventionnels&lt;/em&gt; (ou &lt;em&gt;conventional commits&lt;/em&gt;) s’inscrivent dans une logique d’intégration continue et posent un cadre simple pour écrire des messages clairs et explicites. Voici un apperçu rapide de son fonctionnement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qu'est-ce qu'un commit conventionnel ?
&lt;/h2&gt;

&lt;p&gt;C'est un format de message de commit structuré, qui suit une syntaxe précise. L'idée est de décrire clairement le type de changement apporté dans le code. Voici la structure de base :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type(scope): description courte
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt; : la nature du changement (ex : &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scope&lt;/code&gt; (optionnel) : la partie du code concernée (ex : &lt;code&gt;auth&lt;/code&gt;, &lt;code&gt;api&lt;/code&gt;, &lt;code&gt;ui&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;description&lt;/code&gt; : une phrase concise à l'impératif&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!&lt;/code&gt; (en suffixe du type) : indique un changement majeur (breaking change)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exemples :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat(api): add account creation endpoint
fix(ui): fix misaligned submit button in mobile registration form
docs: update README with installation instructions
feat!: remove deprecated /login endpoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pourquoi utiliser les commits conventionnels ?
&lt;/h2&gt;

&lt;p&gt;Adopter cette convention apporte de nombreux bénéfices :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clarté de l'historique Git&lt;/strong&gt; : plus facile de comprendre les changements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Génération automatique de changelogs&lt;/strong&gt; : avec des outils comme &lt;a href="https://github.com/semantic-release/semantic-release" rel="noopener noreferrer"&gt;semantic-release&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versioning sémantique facilité&lt;/strong&gt; : les types de commits permettent de déduire les changements de version (MAJOR, MINOR, PATCH)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Les types les plus courants
&lt;/h2&gt;

&lt;p&gt;Voici quelques types standard que vous pouvez utiliser :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;feat&lt;/code&gt; : ajout d'une fonctionnalité&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fix&lt;/code&gt; : correction de bug&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docs&lt;/code&gt; : documentation uniquement&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;style&lt;/code&gt; : mise en forme, indentation, etc. (sans impact sur le code, rien à voir avec le CSS)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;refactor&lt;/code&gt; : modification du code sans ajout de fonctionnalité ni correction de bug&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;test&lt;/code&gt; : ajout ou modification de tests&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chore&lt;/code&gt; : tâches diverses (ex : MAJ de dépendances)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  L'objectif final : l'automatisation des versions
&lt;/h2&gt;

&lt;p&gt;Une fois vos messages de commit structurés, vous pouvez aller encore plus loin : automatiser la gestion des versions.&lt;/p&gt;

&lt;p&gt;Certains outils comme &lt;a href="https://github.com/semantic-release/semantic-release" rel="noopener noreferrer"&gt;semantic-release&lt;/a&gt; permettent de déterminer automatiquement les numéros de version à partir des types de commit, de mettre à jour le changelog, de créer un tag Git et de publier la version, le tout sans intervention manuelle.&lt;/p&gt;

&lt;p&gt;Un gain de temps, de rigueur, et de la charge mentale en moins!&lt;/p&gt;

&lt;h2&gt;
  
  
  Quelques outils pour faciliter son utilisation
&lt;/h2&gt;

&lt;p&gt;Vous retrouverez:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La &lt;a href="https://www.conventionalcommits.org/fr/v1.0.0/" rel="noopener noreferrer"&gt;spécification officielle des commits conventionnels&lt;/a&gt; : pour comprendre la syntaxe en détail&lt;/li&gt;
&lt;li&gt;Cet &lt;a href="http://blog.eleven-labs.com/fr/semantic-release/" rel="noopener noreferrer"&gt;article de Eleven Labs&lt;/a&gt; : un bon complément pour découvrir plus en profondeur &lt;code&gt;semantic-release&lt;/code&gt; et l'automatisation des versions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour vous aider à mettre en place les commits conventionnels, plusieurs outils existent :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/commitizen/cz-cli" rel="noopener noreferrer"&gt;Commitizen (cz-cli)&lt;/a&gt; : pour créer des commits via une interface interactive guidée&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/conventional-changelog/commitlint" rel="noopener noreferrer"&gt;commitlint&lt;/a&gt; : pour vérifier que les messages de commit respectent la convention&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; : pour intégrer des vérifications (comme commitlint) en pré-commit&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ci</category>
      <category>cicd</category>
      <category>git</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
