<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Best Practices on Valérian Pyckaert</title>
    <link>https://valerian-pyckaert.dev/tags/best-practices/</link>
    <description>Recent content in Best Practices on Valérian Pyckaert</description>
    <image>
      <title>Valérian Pyckaert</title>
      <url>https://valerian-pyckaert.dev/images/default-cover.svg</url>
      <link>https://valerian-pyckaert.dev/images/default-cover.svg</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 08 May 2026 08:00:00 +0200</lastBuildDate>
    <atom:link href="https://valerian-pyckaert.dev/tags/best-practices/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Conventional Commit</title>
      <link>https://valerian-pyckaert.dev/posts/conventional-commit/</link>
      <pubDate>Fri, 08 May 2026 08:00:00 +0200</pubDate>
      <guid>https://valerian-pyckaert.dev/posts/conventional-commit/</guid>
      <description>Standardiser les messages de commit avec Conventional Commit.</description>
      <content:encoded><![CDATA[<p>Je démarre ici une nouvelle série d&rsquo;articles sur les bonnes pratiques de développement, en commençant par une convention de commit que j&rsquo;utilise au quotidien.</p>
<h2 id="introduction">Introduction</h2>
<p><a href="https://www.conventionalcommits.org/en/v1.0.0/">Conventional Commit</a> est une convention pour formater les messages de commit de manière structurée et standardisée. Elle permet de faciliter la lecture et la compréhension des messages de commit, ainsi que d&rsquo;automatiser certaines tâches comme la génération de changelogs ou la gestion des versions.</p>
<p>Exemple de commit suivant la convention Conventional Commit</p>
<pre tabindex="0"><code>feat: add new feature X
fix: correct bug Y
</code></pre><p>Dans cet exemple, <code>feat</code> indique qu&rsquo;il s&rsquo;agit d&rsquo;une nouvelle fonctionnalité, tandis que <code>fix</code> indique qu&rsquo;il s&rsquo;agit d&rsquo;une correction de bug.</p>
<h2 id="pourquoi-choisir-conventional-commit-">Pourquoi choisir Conventional Commit ?</h2>
<p>Conventional est l&rsquo;une si ce n&rsquo;est la seule convention de commit largement utilisée dans la communauté open source et dans l&rsquo;industrie. Elle est supportée par de nombreux outils et intégrations, ce qui en fait un choix populaire pour les projets de toutes tailles.</p>
<p>Quelques exemples d&rsquo;acteurs majeurs qui utilisent Conventional Commit :</p>
<ul>
<li><a href="https://github.com/angular/angular/pulls?page=2&amp;q=is%3Apr+is%3Aopen">Angular</a></li>
<li><a href="https://github.com/nodejs/nodejs.org/commits/main/">Node.js</a></li>
</ul>
<h2 id="en-pratique">En pratique</h2>
<h3 id="les-types-de-commit-possibles">Les types de commit possibles</h3>
<p>Voici quelques types standard que j&rsquo;utilise au quotidien dans mes projets (trier par ordre d&rsquo;utilisation) :</p>
<ul>
<li>feat : ajout d&rsquo;une fonctionnalité</li>
<li>fix : correction de bug</li>
<li>chore : tâches diverses (ex : MAJ de dépendances)</li>
<li>docs : documentation uniquement</li>
<li>refactor : modification du code sans ajout de fonctionnalité ni correction de bug</li>
<li>test : ajout ou modification de tests</li>
</ul>
<h3 id="le-scope">Le scope</h3>
<p>Il est également possible d&rsquo;ajouter un scope pour préciser la partie du code concernée par le commit.</p>
<p>Par exemple :
<code>feat(auth): add login functionality</code></p>
<p>Dans cet exemple, <code>auth</code> est le scope qui indique que le commit concerne la partie d&rsquo;authentification du projet.</p>
<h3 id="bonnes-pratiques">Bonnes pratiques</h3>
<ul>
<li>Utiliser des verbes à l&rsquo;infinitif (ex : &ldquo;add&rdquo;, &ldquo;fix&rdquo;, &ldquo;update&rdquo;, etc.)</li>
<li>Ne pas dépasser 72 caractères pour la ligne de titre du commit</li>
<li>Ajouter une description plus détaillée dans le corps du commit si nécessaire</li>
<li>Utiliser des préfixes pour indiquer les types de commit (ex : &ldquo;feat:&rdquo;, &ldquo;fix:&rdquo;, etc.)</li>
</ul>
<h2 id="un-pas-vers-lautomatisation">Un pas vers l&rsquo;automatisation</h2>
<p>Les conventional commits sont la première étape vers une chaîne de CI/CD plus automatisée. En utilisant des messages de commit structurés, il devient possible d&rsquo;automatiser la génération de changelogs, la gestion des versions et même le déploiement en production.</p>
<h3 id="workflow-cicd-avec-conventional-commit">Workflow CI/CD avec Conventional Commit</h3>
<pre class="mermaid">
  flowchart TD
    A[Développement] --&gt; B[Conventional Commit]
    B --&gt; C[CI/CD]
    C --&gt; D[Tests automatiques]
    D --&gt; E{Tests réussis ?}
    E -- Oui --&gt; F[Génération Changelog + Versioning]
    E -- Non --&gt; H[Correction du code et nouveau commit]
    F --&gt; I{Déploiement ?}
    I -- Version mineur ou patch --&gt; J[Déploiement automatique]
    I -- Version majeure --&gt; K[Déploiement manuel]
</pre>

<h3 id="stratégie-de-versioning">Stratégie de versioning</h3>
<p>En utilisant les types de commit, il est possible d&rsquo;adopter une stratégie de versioning sémantique (SemVer).</p>
<p>Voici un exemple de politique de versioning basée sur les types de commit :</p>
<ul>
<li>Un commit de type <code>feat</code> peut déclencher une nouvelle version mineure (ex : 1.0.0 -&gt; 1.1.0)</li>
<li>Un commit de type <code>fix</code> peut déclencher une nouvelle version patch (ex : 1.0.0 -&gt; 1.0.1)</li>
<li>Un commit de type <code>refactor</code> ou <code>chore</code> peut ne pas déclencher de changement de version, ou déclencher une nouvelle version patch selon la politique adoptée.</li>
</ul>
<p>Pour réaliser ce type d&rsquo;automatisation, il existe de nombreux outils comme <a href="https://semantic-release.gitbook.io/semantic-release/">semantic-release</a> ou encore <a href="https://github.com/cocogitto/cocogitto">Cocogitto</a> que j&rsquo;apprécie beaucoup qui peuvent analyser les messages de commit et gérer automatiquement la génération de changelogs et le versioning.</p>
<p><strong>Sources</strong></p>
<ul>
<li><a href="https://www.conventionalcommits.org/en/v1.0.0/">Conventional Commit</a></li>
<li><a href="https://blog.stephane-robert.info/docs/developper/conventional-commits/">Blog Stéphane Robert</a></li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
