Introduction
Les monorepos offrent des avantages tels que la possibilité de réaliser des modifications atomiques affectant plusieurs parties du système en une seule étape, éliminant ainsi des problèmes de compatibilité et d'intégration. Cependant, la gestion des versions dans un monorepo polyglot peut être complexe.
Contexte Technique
Pour gérer les versions dans un monorepo polyglot, nous pouvons utiliser l'outil changesets, principalement conçu pour l'écosystème JavaScript/TypeScript. Changesets permet de définir le contenu des changelogs, d'influencer les numéros de version des packages, d'automatiser les commits et les étiquettes, ainsi que les builds.
Changesets fonctionne avec une version sémantique par package et chaque package a son propre fichier CHANGELOG.md. L'équipe de changesets propose également une action GitHub, changesets/action, qui permet de spécifier des scripts personnalisés pour les commandes de version et de publication.
Analyse et Implications
Pour utiliser changesets dans un monorepo polyglot, nous devons configurer un espace de travail pnpm à la racine avec tous les packages. Nous devons également créer des fichiers package.json de proxy pour les packages non-JavaScript afin que changesets puisse effectuer les mises à jour de version.
Il est important de noter que changesets est conçu pour fonctionner avec des packages JavaScript, nous devons donc adapter notre configuration pour prendre en compte les packages polyglots. Nous pouvons utiliser des scripts personnalisés pour mettre à jour les métadonnées de version pour les packages non-JavaScript.
Perspective
Pour automatiser les releases, nous pouvons utiliser des workflows GitHub pour générer les pull requests de changelog, mettre à jour les métadonnées de package, pousser les étiquettes et déclencher les builds. Il est important de configurer correctement les workflows pour éviter les problèmes de déclenchement des workflows sur les étiquettes.