Releases
Atlas publie ses paquets publiables (bibliothèques, outils en ligne de commande, services consommables) sur le registre npm public sous le scope @univ-lehavre/atlas-*. Les applications utilisateur (catégorie apps/) ne sont pas publiées sur npm ; elles sont déployées séparément.
Le mécanisme : Changesets
Section intitulée « Le mécanisme : Changesets »Atlas utilise Changesets, un outil qui découple deux étapes :
- Le contributeur déclare un changement dans sa pull request.
- Le bot agrège les déclarations et orchestre les bumps de version et la publication.
Workflow complet
Section intitulée « Workflow complet »contributeur bot Changesets registre npm │ │ │ │ ouvre PR + ajoute │ │ │ .changeset/*.md │ │ │ ───────────────────▶ │ │ │ │ │ │ [merge dans main] │ │ │ │ │ │ │ ouvre PR │ │ │ "Version Packages" │ │ │ (bump versions + CHANGELOG) │ │ │ │ │ [merge de la PR Version] │ │ │ │ │ │ │ ───── publication ───────────▶ │ │ │ (avec provenance OIDC) │1. Ajouter un changeset
Section intitulée « 1. Ajouter un changeset »Dans la PR qui modifie un paquet publiable :
pnpm changeset:addL’outil pose deux questions interactives :
- Quels paquets sont touchés ? (sélection multiple parmi les paquets du workspace)
- Quel type de bump ?
patch— correction de bug, sans changement d’APIminor— nouvelle fonctionnalité rétrocompatiblemajor— changement incompatible (breaking change)
Le fichier .changeset/<slug>.md créé doit être commité avec le reste de la PR. Son contenu :
---"@univ-lehavre/atlas-foo": minor"@univ-lehavre/atlas-bar": patch---
Description courte du changement.2. PR « chore: version packages »
Section intitulée « 2. PR « chore: version packages » »À chaque merge sur main contenant des changesets, le bot changesets/action ouvre automatiquement une PR titrée « chore: version packages ». Cette PR :
- consomme les fichiers
.changeset/*.md, - incrémente les versions dans les
package.jsonconcernés, - met à jour les
CHANGELOG.mdcorrespondants.
Le mainteneur revue la PR et la fusionne quand le moment est bon (cumul de changements, alignement avec un événement externe, etc.).
3. Publication npm
Section intitulée « 3. Publication npm »Le merge de la PR « Version Packages » déclenche le workflow release.yml :
turbo build --filter='!./apps/**' # Build de tout sauf les apps./scripts/release/publish-packages.shLe script publish-packages.sh itère sur les paquets dont la version a été bumpée et exécute pour chacun :
npm publish --provenance --access publicLe flag --provenance active la signature OIDC : npm reçoit une attestation cryptographique liant le paquet publié à son code source (commit, workflow GitHub Actions, runner). Les consommateurs peuvent la vérifier avec npm audit signatures.
Vérifier la provenance d’un paquet publié
Section intitulée « Vérifier la provenance d’un paquet publié »# Provenance complète d'un paquetnpm view @univ-lehavre/atlas-crf-client@<version> --json | jq .dist.attestations
# Vérifie la signaturenpm audit signaturesPaquets renommés ou dépréciés
Section intitulée « Paquets renommés ou dépréciés »Quand un paquet est renommé (par exemple redcap-core → crf-core), un script déprécie l’ancien nom pour signaler aux consommateurs où aller :
pnpm release:deprecate-renamedLe script lit scripts/release/deprecate-renamed-packages.sh qui contient la liste des renommages et exécute npm deprecate <old> "<message>" pour chacun. L’ancien paquet reste accessible (pas de unpublish) mais affiche un avertissement à l’installation.
Si la release échoue
Section intitulée « Si la release échoue »- Cliquer sur le run rouge dans Actions → Release.
- Identifier le paquet en échec (souvent : conflit de version, token expiré, build qui échoue).
- Corriger en local, ouvrir une PR de fix.
- Une fois fusionnée, relancer manuellement le workflow Release ou attendre la prochaine PR « Version Packages ».
Ne jamais publier manuellement (npm publish depuis une machine de dev) — la provenance OIDC ne serait pas attachée et le paquet ne serait pas vérifiable.