Versionnage automatique avec GitVersion
GitVersion enlève la douleur du versionnage manuel (et les débats de couloir) en générant automatiquement des numéros de version à partir de votre historique Git, selon les principes SemVer. Au lieu de « penser à bumper » (et oublier), GitVersion analyse vos commits et branches pour déterminer la prochaine version logique.
Intégré à votre CI/CD, chaque commit - même sur une branche de fonctionnalité - reçoit un numéro de version unique et traçable.
INFO
Chaque commit a une version ! GitVersion génère des pré‑releases uniques pour chaque commit sur les branches de fonctionnalité (ex : 1.1.0-JIRA-1234-user-login-form.1, puis .2, etc.). Vous pouvez ainsi construire et tester depuis n’importe quel point du développement.
GitFlow + SemVer
N’importe quel commit étant potentiellement déployable, GitVersion peut calculer un numéro SemVer pertinent pour n’importe quelle branche et commit. GitVersion est configurable et reste conforme à SemVer.
Installation
Installez localement avec Chocolatey :
choco install gitversionOu intégrez‑le dans votre CI/CD via ces templates :
Configuration
Ajoutez un GitVersion.yml à la racine du dépôt pour l’adapter à votre flux. Exemple ci‑dessous, pensé pour notre approche « tronc + squash + support » (à ajuster selon vos contraintes) :
mode: ContinuousDelivery
assembly-file-versioning-scheme: MajorMinorPatchTag
assembly-versioning-scheme: MajorMinorPatchTag
major-version-bump-message: "^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)"
minor-version-bump-message: "^(feat)(\\([\\w\\s-]*\\))?:"
patch-version-bump-message: "^(build|chore|ci|docs|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?:"
commit-message-incrementing: Enabled
branches:
main:
label: beta
feature:
regex: ^((task)|(feat(ure)?))[/-](?<BranchName>.{1,25})
label: '{BranchName}'
increment: Minor
source-branches: ["main", "feature"]
mode: ContinuousDelivery
support:
regex: ^support[/-](?<BranchName>.+)
label: RC
increment: Patch
source-branches: ["main"]
mode: ContinuousDelivery
fix:
regex: ^(bug|hot)?fix[/-](?<BranchName>.{1,25})
label: '{BranchName}'
increment: Patch
source-branches: ["main", "support"]
mode: ContinuousDeliveryBranches de support et incréments mineur/patch
La configuration ci‑dessus fonctionne bien et s’appuie sur les messages de commit (format Conventional Commits) pour incrémenter le bon chiffre. Petit bémol avec les branches de support :
Dans cet exemple, comme le commit sur la branche de support est de type feat:, GitVersion incrémentera le chiffre mineur, ce qui pourrait conduire à une future release 1.1.0… que l’on préférerait voir sur main.
Deux façons d’éviter cela :
- Éviter les commits
feat:et les branchesfeaturesur les branches de support, et utiliser un autre type - après tout, on n’est pas censé ajouter des fonctionnalités sur une branche de support, n’est‑ce pas ? - Passer
commit-message-incrementing: Disabledet s’appuyer uniquement sur les types de branches. Vous perdrez toutefois l’avantage des Conventional Commits.