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.
{
"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-changelogpour queCHANGELOG.mdsoit laissé intact.- sinon (prod) — garantit que
git.tagExcludeexclut 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.

