Skip to content

Configuration et intégration release-it

.release-it.json

Configuration par projet, à la racine du dépôt. release-util init la génère (config.ts:defaultReleaseItConfig). L'outil ne possède qu'une seule clé, trunkBranch (défaut : master) ; tout le reste est transmis tel quel à release-it.

json
{
  "trunkBranch": "main",
  "git": {
    "requireCleanWorkingDir": false,
    "requireUpstream": false,
    "commitMessage": "chore(release): ${version}",
    "tagName": "${version}",
    "tagAnnotation": "Release ${version}",
    "tagExclude": "*-*",
    "commit": true,
    "tag": false,
    "push": false
  },
  "github": { "release": false },
  "gitlab": { "release": false },
  "npm": { "publish": false },
  "hooks": {},
  "plugins": {
    "@release-it/conventional-changelog": {
      "preset": { "name": "conventionalcommits" },
      "infile": "CHANGELOG.md"
    }
  }
}

Les défauts désactivent volontairement tag / push / publish : la CI fait le tag, release-util fait le push, et le flux local reste sans authentification.

trunkBranch

La branche sur laquelle release exige d'être. Doit correspondre à la branche par défaut du remote (la CLI le vérifie à chaque release). Détection par init : git symbolic-ref refs/remotes/origin/HEAD, repli sur git config init.defaultBranch, puis master.

git.tagExclude: "*-*"

Exclut tout tag avec tiret (donc de pré-release : X.Y.Z-staging.N, X.Y.Z-<slug>.N) au moment de choisir la frontière du changelog. release-it dérive le « from » du changelog via git describe --tags --abbrev=0, qui renvoie le tag atteignable le plus récent — et ce serait le dernier tag -staging.N (ou -<slug>.N), puisque ce sont de vrais tags annotés sur le trunk. Laissé tel quel, le changelog prod commencerait au dernier tag staging et raterait tout ce qui a atterri pendant le cycle de staging. Exclure les tags à tiret épingle la frontière au dernier tag stable/prod.

Intégration release-it

src/release-it.ts. buildReleaseItConfig() est pure : elle prend la config brute et renvoie un objet neuf (ne mute jamais l'entrée). Elle effectue deux transformations mutuellement exclusives sur skipChangelog :

  • skipChangelog: true (staging / feature) — retire le plugin @release-it/conventional-changelog pour que CHANGELOG.md soit laissé intact.
  • sinon (prod) — garantit que git.tagExclude exclut les tags de pré-release (cf. ci-dessus). Un override explicite du consommateur est respecté.

Dans tous les cas, elle retire trunkBranch (la clé de release-util, pas de release-it) avant de passer la config. release-it est invoqué comme sous-processus avec un fichier de config temporaire.

Contributors

No contributors

Changelog

No recent changes