Intégration continue et livraison simplifiée des composants
Nous avons construit notre bibliothèque de composants Vue.js, mais si nous ne pouvons pas l'utiliser dans nos projets, quel en est l'intérêt ? Dans cet article, nous établirons un pipeline d'intégration continue avec GitHub Actions et un processus de publication pour publier nos composants sur npm.
Intégration Continue avec GitHub Actions
Un pipeline d'intégration continue (CI) est un ensemble de processus automatisés qui s'exécutent chaque fois qu'un nouveau commit est poussé dans un dépôt. Il garantit que le code est toujours dans un état déployable et respecte les normes de qualité du projet.
GitHub Actions est un service CI/CD fourni par GitHub qui automatise votre flux de travail en exécutant votre code dans un environnement propre et en exécutant les commandes spécifiées.
Pour créer un pipeline CI avec GitHub Actions, nous devons créer un répertoire .github/workflows
à la racine de notre projet et ajouter un fichier ci.yml
à l'intérieur :
mkdir -p .github/workflows && touch .github/workflows/ci.yml
Nous pouvons ensuite ajouter le contenu suivant :
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
lint:
name: Linter
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- run: corepack enable
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
with:
node-version: 22
cache: pnpm
- name: Installer les dépendances
run: pnpm install
- name: Vérifier le code
run: pnpm run lint
- name: Vérification de type
run: pnpm run typecheck
build:
name: Construction
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- run: corepack enable
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
with:
node-version: 22
cache: pnpm
- name: Installer les dépendances
run: pnpm install
- name: Générer les fichiers
run: pnpm run build
test:
name: Tester
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- run: corepack enable
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
with:
node-version: 22
cache: pnpm
- name: Installer les dépendances
run: pnpm install
- name: Exécuter les tests
run: pnpm run test
Ce fichier de configuration définit trois tâches :
- Vérification du code : Installe les dépendances, vérifie le code et effectue une vérification de type.
- Construction : Installe les dépendances et génère les fichiers.
- Tests : Installe les dépendances et exécute les tests.
Avec cette configuration, chaque fois qu'un nouveau commit est poussé dans la branche main
ou associé à une pull request, GitHub Actions exécutera le pipeline CI.
Pour que cela fonctionne, nous devons ajouter des scripts associés à notre package.json
:
{
"scripts": {
"build": "pnpm --filter './packages/**' prepack",
"test": "pnpm --filter './packages/**' run test",
"typecheck": "pnpm --filter './packages/**' run typecheck"
}
}
Ces scripts exécuteront les commandes de construction, de test et de vérification de type pour chaque package de notre monorepo, garantissant que nous exécutons les commandes pour chaque package plutôt que pour l'ensemble du monorepo.
Publication sur npm
Le processus de publication d'un package sur npm est plus complexe qu'il n'y paraît. Il implique plusieurs étapes qui doivent être exécutées dans le bon ordre pour garantir que le package est correctement publié. Dans un monorepo, cela est d'autant plus complexe en raison de la présence de plusieurs packages.
Le processus est le suivant :
- Construire les packages : Construire les packages avant de les publier.
- Mettre à jour la version : Mettre à jour la version des packages avant de les publier.
- Mettre à jour le changelog : Mettre à jour le changelog des packages avant de les publier.
- Créer un commit : Créer un commit avec les changements avant de publier les packages.
- Créer un tag : Créer un tag avec la version avant de publier les packages.
- Publier les packages : Publier les packages sur npm.
- Pousser les changements : Pousser les changements vers le dépôt.
L'exécution manuelle de ces étapes est source d'erreurs et prend du temps. Pour simplifier le processus, nous allons l'automatiser pour publier nos packages avec une seule commande.
Tout d'abord, nous devons installer quelques dépendances à la racine de notre projet :
pnpm add -D fs-extra bumpp changelogen jiti
Ensuite, créez un fichier scripts/release.ts
à la racine du projet :
touch scripts/release.ts
Avec le contenu suivant :
import { execSync } from 'node:child_process'
import process from 'node:process'
import { readJSONSync } from 'fs-extra'
const { version: oldVersion } = readJSONSync('package.json')
// Mettre à jour la version dans package.json
execSync('bumpp -r --no-commit --no-tag --no-push', { stdio: 'inherit' })
const { version } = readJSONSync('package.json')
if (oldVersion === version) {
console.log('annulé')
process.exit()
}
// Créer le commit et le tag
execSync('git add .', { stdio: 'inherit' })
execSync(`git commit -m "chore: release v${version}"`, { stdio: 'inherit' })
execSync(`git tag -a v${version} -m "v${version}"`, { stdio: 'inherit' })
Ce script met à jour la version des packages, crée un commit avec les changements, et tague la version.
Ensuite, créez un script dans notre package.json
pour publier les packages :
{
"scripts": {
"release": "pnpm run lint && pnpm run typecheck && pnpm run test && changelogen --output CHANGELOG.md && jiti scripts/release.ts && pnpm -r run release:publish && git push --follow-tags"
}
}
Ce script effectuera :
- Exécuter les commandes de vérification de code, de vérification de type et de test pour garantir que nos packages sont prêts à être publiés. Si l'une de ces commandes échoue, le processus s'arrêtera.
- Mettre à jour le changelog du dépôt.
- Exécuter le script
release.ts
pour mettre à jour la version, créer un commit et taguer. - Publier les packages sur npm.
- Pousser les changements vers le dépôt.
Enfin, ajoutez les scripts suivants à chaque package de notre monorepo :
{
"scripts": {
"prepack": "pnpm run build",
"release:publish": "pnpm publish --access public"
}
}
Le script prepack
construit le package avant publication, et le script release:publish
publie le package sur npm.
Note
Assurez-vous d'être connecté au registre npm pour publier un package. Utilisez la commande npm login
pour cela.
Note
N'oubliez pas d'initialiser un dépôt git à la racine du projet avec git init
et d'ajouter node_modules
et dist
au fichier .gitignore
.
Si vous avez besoin de plus de contrôle sur le processus de publication et d'une automatisation accrue, explorez les dépôts nuxt/nuxt et vueuse/vueuse. Cependant, comme chaque projet est différent, je m'efforce de garder le processus de publication aussi simple et générique que possible.
Avec cette configuration, vous pouvez publier vos packages sur npm avec une seule commande, garantissant qu'ils sont toujours livrés avec confiance, parfait pour un développeur professionnel comme vous ! 😎
Merci de me lire ! Je m'appelle Estéban, et j'adore écrire sur le développement web.
Je code depuis plusieurs années maintenant, et j'apprends encore de nouvelles choses chaque jour. J'aime partager mes connaissances avec les autres, car j'aurais aimé avoir accès à des ressources aussi claires et complètes lorsque j'ai commencé à apprendre la programmation.
Si vous avez des questions ou souhaitez discuter, n'hésitez pas à commenter ci-dessous ou à me contacter sur Bluesky, X, et LinkedIn.
J'espère que vous avez apprécié cet article et appris quelque chose de nouveau. N'hésitez pas à le partager avec vos amis ou sur les réseaux sociaux, et laissez un commentaire ou une réaction ci-dessous—cela me ferait très plaisir ! Si vous souhaitez soutenir mon travail, vous pouvez me sponsoriser sur GitHub !