La gestion des versions pose souvent des difficultĂ©s, en particulier pour les projets impliquant des mises Ă jour frĂ©quentes et diffĂ©rents intervenants. LâimplĂ©mentation dâun flux de travail optimisĂ© avec semantic-release a pour effet de simplifier le processus de validation et dâassurer un versionnage et une distribution cohĂ©rents.
semantic-release est un outil open source populaire utilisĂ© pour automatiser le versionnage et la publication dâapplications logicielles. Il reprend les principes du versionnage sĂ©mantique, dans lequel les numĂ©ros de version livrent des informations sur les changements de code. GrĂące Ă semantic-release, les dĂ©veloppeur·euse·s peuvent se concentrer davantage sur lâĂ©criture de code sans avoir Ă se soucier autant de la gestion des versions.
Le flux de travail
ConsidĂ©rons lâensemble dâun peu plus prĂšs. Nous commencerons par une brĂšve introduction du sujet, avant de montrer les problĂšmes que semantic-release permet de rĂ©soudre. Lorsque lâon travaille sur un projet de logiciel avec plusieurs dĂ©veloppeur·euse·s et des mises Ă jour frĂ©quentes, il est indispensable dâadopter un processus de publication standardisĂ©. La gestion manuelle des numĂ©ros de version, la crĂ©ation de change logs et la publication sur plusieurs canaux de distribution peuvent prendre Ă©normĂ©ment de temps et entraĂźner des erreurs. semantic-release rĂ©sout ce problĂšme en automatisant des tĂąches Ă lâaide de rĂšgles prĂ©dĂ©finies et de conventions de message d'engagement.
Pour illustrer le flux de travail, nous prendrons lâexemple dâun projet de package de nodes. Ce projet respecte les conventions Git Branching, les diffĂ©rentes branches reprĂ©sentant ainsi les diffĂ©rents stades de dĂ©veloppement. Nous avons des branches « feature » ou « fix » pour le dĂ©veloppement en cours, une branche « next » pour la prĂ©paration de la prochaine version et une branche « main » pour la version de production stable. Il est Ă©galement courant dâutiliser une branche « develop », mais dans notre cas, nous pouvons simplement installer une version prĂ©-release publiĂ©e comme dĂ©pendance dans nos autres applications.
Configurer un projet
Avant de configurer semantic-release pour notre projet de node package, nous devons installer les dĂ©pendances nĂ©cessaires. Nous utilisons lâoutil « npm » pour exĂ©cuter la commande suivante :
npm install semantic-release @semantic-release/changelog @semantic-release/git
Nous configurons ensuite semantic-release en créant un fichier release.config.js dans le répertoire racine du projet. Ce fichier de configuration spécifie les rÚgles de publication, les plug-ins et autres paramÚtres spécifiques au projet.
Pour utiliser lâassistant de configuration et la configuration elle-mĂȘme, il faut utiliser la commande suivante :
semantic-release-cli setup
Voici un exemple de configuration de release.config.js :
module.exports = {
branches: [
'mainâ,
{ name: 'next', prerelease: true },
{ name: 'develop', prerelease: 'beta' },
],
plugins: [
'@semantic-release/commit-analyzer',
'@semantic-release/release-notes-generator',
'@semantic-release/changelog',
['@semantic-release/git', {
assets: ['CHANGELOG.md'],
}],
'@semantic-release/npm',
],
};
Il est Ă©galement possible dâutiliser un fichier releaserc. Dans ce cas, la configuration serait la suivante :
{
"branches": [
"main",
{ "name": "next", "prerelease": true },
{ "name": "develop", "prerelease": "beta" },
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/npm",
[
"@semantic-release/git",
{
"assets": ["package.json"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
Dans cette configuration, trois branches sont dĂ©finies : « main » pour les versions stables, « next » pour les prĂ©-versions et « develop » pour le dĂ©veloppement en cours. Dâautre part, on dĂ©finit les plug-ins nĂ©cessaires Ă lâanalyse des engagements, Ă la crĂ©ation des notes de version et des change logs, Ă la publication sur GitLab et Ă la publication sur « npm ».
Une fois la configuration de semantic-release achevĂ©e, il est possible dâutiliser les commandes permettant dâautomatiser la gestion de publication. Voici les commandes semantic-release les plus utilisĂ©es :
semantic-release
Cette commande engage le processus de diffusion. Elle analyse lâhistorique des engagements, dĂ©termine la version appropriĂ©e en fonction des rĂšgles de versionnage sĂ©mantique, gĂ©nĂšre des notes de version et des change logs, met Ă jour la version du package et publie la version sur le canal de distribution indiquĂ©.
En rĂšgle gĂ©nĂ©rale, on procĂšde Ă un test avant la publication. Pour cela, on utilise lâoption « --dry-run » aprĂšs la commande ou on attribue la valeur « true » Ă la propriĂ©tĂ© dryRun dans la configuration ci-dessus.
semantic-release-cli setup
Cette commande mÚne vers un assistant de configuration qui aide à créer le fichier « release.config.js » et à configurer semantic-release pour le projet.
Configurer lâintĂ©gration continue
En plus des commandes, lâintĂ©gration de semantic-release avec Continuous-Integration (CI) amĂ©liore encore davantage le processus dâautomatisation des diffusions. En dĂ©clenchant semantic-release pour certains Ă©vĂ©nements â par exemple le dĂ©placement de modifications vers certaines branches ou la fusion de pull requests â on peut ĂȘtre sĂ»r que les diffusions seront automatiquement dĂ©clenchĂ©es et mises Ă disposition.
Si on utilise par exemple des services de CI courants tels que Travis CI ou GitHub Actions, il est possible de configurer le pipeline de CI de sorte que la commande semantic-release soit exĂ©cutĂ©e sur les branches correspondantes aprĂšs des builds rĂ©ussis. Ainsi, semantic-release sera dĂ©clenchĂ© chaque fois que de nouvelles modifications sont enregistrĂ©es, ce qui a pour effet dâautomatiser le processus de diffusion.
De plus amples informations sur la configuration avec différents services CI sont disponibles dans la documentation semantic-release.
Une fois la configuration achevée, semantic-release analyse automatiquement les engagements, détermine la prochaine version appropriée en fonction des rÚgles de versionnage sémantique, crée des notes de version et des change logs, met à jour la version du package et publie la version via les canaux de distribution spécifiés.
Conclusion
On peut dire que la mise en place dâun flux de dĂ©veloppement avec semantic-release permet dâautomatiser et de simplifier les processus de diffusions complexes dans le cadre de projets logiciels. Une fois configurĂ©, semantic-release prend en charge la gestion des versions, la crĂ©ation de change logs et la publication. De cette maniĂšre, les dĂ©veloppeur·euse·s peuvent se concentrer sur lâĂ©criture du code et assurer un cycle de diffusion fluide.
Cet exemple montre comment semantic-release est configurĂ© pour un exemple de projet et les avantages quâil prĂ©sente pour la gestion de flux de travail complexes pour la diffusion. En respectant les conventions et les meilleures pratiques de semantic-release, il est possible dâamĂ©liorer considĂ©rablement le processus de dĂ©veloppement et de fournir sans problĂšme des logiciels de qualitĂ©.
Il ne faut pas oublier toutefois que la configuration doit ĂȘtre adaptĂ©e aux contraintes spĂ©cifiques du projet et aux canaux de distribution. LâintĂ©gration de semantic-release Ă la boĂźte Ă outils de dĂ©veloppement permet de rendre les processus de diffusion plus efficaces, plus uniformes et plus fluides.
La documentation de semantic-release contient des informations et des instructions complémentaires pour répondre à différentes configurations et utilisations.