Pour résumer, le sémantique versionning est une logique de fabrication des numéros de version d’un produit où l’on identifie une version v1.2.3 telle que décrite sur le site officiel :
Étant donné un numéro de version MAJEUR.MINEUR.CORRECTIF, il faut incrémenter :
le numéro de version MAJEUR quand il y a des changements rétro-incompatibles, le numéro de version MINEUR quand il y a des changements rétro-compatibles, le numéro de version de CORRECTIF quand il y a des corrections d’anomalies rétro-compatibles
La prise de décision d’incrémenter une version ne peut être que manuelle : il faut un humain pour savoir si ce qui a été modifié concerne un correctif ou une nouvelle fonctionnalité…
Par contre, il peut-être utile de répercuter cette prise de décision automatiquement. Par exemple pour tagger un dépôt Git, ou encore pour changer un fichier de code source qui contiendrait la version actuelle en dur. C’est ce que j’ai fait pour PhpMetrics.
À l’heure où j’écris ces lignes, la version actuelle de PhpMetrics est la v1.2.0, comme nous le montre la commande suivante :
La version de l’application est stockée en dur dans le fichier de création du phar (build.php
):
À chaque montée de version, je dois donc penser à modifier ce fichier, puis à créer le tag Git ; ce que j’oublie tout le temps de faire… Il me faut donc l’automatiser.
Première étape : trouver un moyen simple de stocker mon numéro de version actuelle et de l’incrémenter. Ma première idée
était de me tourner vers les tags Git en parsant le résultat d’un git describe --tags
, mais j’ai trouvé plus simple : semver, un outil qui fait ça
très bien. Pour incrémenter une version je n’ai plus qu’à lancer, au choix :
Et je récupère la version actuelle avec la commande semver tag
. (les infos sont stockées dans un fichier .semver
à la racine du projet).
Au lieu de mettre en dur la version dans mes sources, j’utilise donc un tag:
Il faut désormais remplacer ce tag par la vraie version récupérée avec semver tag
. sed
est mon meilleur allié :
Reste enfin à créer un tag git pour cette release :
Et voilà le travail ! Un petit Makefile et le tour est joué. Voici pour les plus curieux le Makefile de PhpMetrics:
Lorsque je veux une nouvelle version, il ne me reste donc que deux lignes à taper pour construire mon phar avec la bonne version:
make tag VERSION=minor
make
La commande php phpmetrics.phar --version
indique désormais la bonne version.
Je sais qu’il existe des plugins Jenkins pour ça, mais je souhaitais pouvoir exécuter le processus manuellement si besoin, directement dans mon terminal.
je me doute qu’il existe des solutions plus pertinentes que celle que je décris ici ; vos retours sont donc les bienvenus.
© Jean-François Lépine, 2013 - 2024