On utilise Changesets pour gérer le versioning sémantique et la génération automatique des changelogs.

Principe

Chaque changement significatif dans le code doit être accompagné d'un changeset - un petit fichier décrivant la nature du changement (patch, minor, major) et un résumé lisible.

Ces fichiers s'accumulent dans .changeset/ au fil des PR, puis sont consommés lors d'une release pour :

  • Bumper automatiquement les versions des packages concernés
  • Générer les entrées de CHANGELOG.md

Quand créer un changeset ?

SituationChangeset ?
Nouvelle fonctionnalité visible par l'utilisateurminor
Correction de bugpatch
Breaking change (API, contrat, schéma)major
Refactoring interne, style, docs❌ Non
Mise à jour de dépendances (sans impact API)❌ Non

Workflow

1. Créer un changeset après ta modification

bash
1pnpm changeset

Un assistant interactif te demande le ou les packages impactés, le type de bump et un résumé. Un fichier est créé dans .changeset/ - committe-le avec ton code.

bash
1git add .changeset/ 2git commit -m "chore: add changeset for feat(auth)"

2. Lors d'une release - bumper les versions

bash
1pnpm changeset:version

Cette commande lit tous les fichiers .changeset/, met à jour les package.json, génère les CHANGELOG.md et supprime les changesets consommés.

bash
1git add . 2git commit -m "chore: version packages"

3. Publier (si applicable)

bash
1pnpm changeset publish

Dans ce projet, les releases sont automatisées via GitHub Actions. Le workflow crée une PR de release automatiquement dès qu'il détecte des changesets non consommés sur main.


Types de bump

TypeQuandExemple de version
patchBug fix, correction mineure1.2.3 -> 1.2.4
minorNouvelle fonctionnalité rétrocompatible1.2.3 -> 1.3.0
majorBreaking change1.2.3 -> 2.0.0

Règles

  • ✅ Un changeset par fonctionnalité ou correction (une PR = un changeset)
  • ✅ Le message du changeset est rédigé pour être lu dans un changelog (pas comme un commit)
  • ✅ Committe le fichier .changeset/ dans la même PR que le code
  • ❌ Ne pas bumper manuellement les package.json
  • ❌ Ne pas éditer les CHANGELOG.md à la main