doc-locale/fr-fr/ci/examples/semantic-release.md
{{< details >}}
{{< /details >}}
Ce guide explique comment publier automatiquement des paquets npm dans le registre de paquets GitLab à l'aide de semantic-release.
Vous pouvez également consulter ou dupliquer la source de l'exemple complète.
Ouvrez un terminal et accédez au dépôt du projet.
Exécutez npm init. Nommez le module selon les conventions de nommage du registre de paquets. Par exemple, si le chemin du projet est gitlab-examples/semantic-release-npm, nommez le module @gitlab-examples/semantic-release-npm.
Installez les paquets npm suivants :
npm install semantic-release @semantic-release/git @semantic-release/gitlab @semantic-release/npm --save-dev
Ajoutez les propriétés suivantes au fichier package.json du module :
{
"scripts": {
"semantic-release": "semantic-release"
},
"publishConfig": {
"access": "public"
},
"files": [ <path(s) to files here> ]
}
Mettez à jour la clé files avec des patterns glob qui sélectionnent tous les fichiers à inclure dans le module publié. Des informations supplémentaires sur files sont disponibles dans la documentation npm.
Ajoutez un fichier .gitignore au projet pour éviter de committer node_modules :
node_modules
Créez un fichier .gitlab-ci.yml avec le contenu suivant :
default:
image: node:latest
before_script:
- npm ci --cache .npm --prefer-offline
- |
{
echo "@${CI_PROJECT_ROOT_NAMESPACE}:registry=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/"
echo "${CI_API_V4_URL#https?}/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=\${CI_JOB_TOKEN}"
} | tee -a .npmrc
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .npm/
workflow:
rules:
- if: $CI_COMMIT_BRANCH
variables:
NPM_TOKEN: ${CI_JOB_TOKEN}
stages:
- release
publish:
stage: release
script:
- npm run semantic-release
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Cet exemple configure le pipeline avec un seul job, publish, qui exécute semantic-release. La bibliothèque semantic-release publie de nouvelles versions du paquet npm et crée de nouvelles releases GitLab (si nécessaire).
Le before_script par défaut génère un fichier .npmrc temporaire utilisé pour s'authentifier auprès du registre de paquets pendant le job publish.
Dans le cadre de la publication d'un paquet, semantic-release incrémente le numéro de version dans package.json. Pour que semantic-release puisse committer cette modification et la transmettre à GitLab, le pipeline nécessite une variable CI/CD personnalisée nommée GITLAB_TOKEN. Pour créer cette variable :
GITLAB_TOKEN.semantic-release extrait ses informations de configuration depuis un fichier .releaserc.json dans le projet. Créez un fichier .releaserc.json à la racine du dépôt :
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/gitlab",
"@semantic-release/npm",
[
"@semantic-release/git",
{
"assets": ["package.json"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
Dans l'exemple de configuration semantic-release précédent, vous pouvez remplacer le nom de la branche par la branche par défaut de votre projet.
Testez le pipeline en créant un commit avec un message tel que :
fix: testing patch releases
Transmettez le commit vers la branche par défaut. Le pipeline devrait créer une nouvelle release (v1.0.0) sur la page Release du projet et publier une nouvelle version du paquet sur la page Registre de paquets du projet.
Pour créer une release mineure, utilisez un message de commit tel que :
feat: testing minor releases
Ou, pour un changement incompatible :
feat: testing major releases
BREAKING CHANGE: This is a breaking change.
Des informations supplémentaires sur la façon dont les messages de commit sont associés aux releases sont disponibles dans la documentation de semantic-release.
Pour utiliser le module publié, ajoutez un fichier .npmrc au projet qui dépend du module. Par exemple, pour utiliser le module de l'exemple de projet :
@gitlab-examples:registry=https://gitlab.com/api/v4/packages/npm/
Ensuite, installez le module :
npm install --save @gitlab-examples/semantic-release-npm
Un tag Git supprimé du dépôt peut parfois être recréé par semantic-release lorsque les runners GitLab utilisent une version mise en cache du dépôt. Si le job s'exécute sur un runner avec un dépôt en cache qui contient encore le tag, semantic-release recrée le tag dans le dépôt principal.
Pour éviter ce comportement, vous pouvez :
GIT_STRATEGY: clone.git fetch --prune-tags dans votre script CI/CD.