Publication
Checklist avant publication, versionnage semver et procédure npm publish vers le registre Fraza.
@fraza/core est publié sur le registre npm https://registry.fraza.ca/. Sa lecture est libre, sa publication demande un compte. Le dépôt source est hébergé sur Gitea, en dépôt privé.
Authentification, une seule fois
npm config set "@fraza:registry" https://registry.fraza.ca/
npm config set "@fraza-pro:registry" https://registry.fraza.ca/
npm login --registry=https://registry.fraza.ca/La connexion reste obligatoire pour publier, sur les deux scopes.
Checklist
-
npm run auditne remonte aucune vulnérabilitéhighoucritical. -
npm run buildpasse sans erreur ni avertissement. - La documentation impactée est à jour dans
docs/. - La section
docs/06-modules/décrit la dernière version publiée de chaque module documenté. - Toute variable d'environnement ajoutée est dans le catalogue
src/core/doctor/env.jset dans Variables d'environnement.npm run buildle vérifie. - Tout point d'entrée ajouté est dans
package.json#exportset dans Points d'entrée. -
THIRD-PARTY-NOTICES.mdest régénéré et commité si les dépendances ont bougé. -
node scripts/sync-version.js --checkpasse : le module de version suit lepackage.json. - Toute évolution de schéma est une migration versionnée, pas un correctif ajouté à
createTables(). - Un module dont la version minimale de core change met à jour
manifest.requiresCoreet sonpeerDependencies. - Pour
@fraza/start:npm run check:contractpasse,templates/suit le contrat déclaré par le core. - Pour un module Fraza Pro, toute contribution extérieure à HYKO est couverte par une cession de droits écrite.
- La version est à jour dans
package.json.
npm run audit lance npm audit --omit=dev --omit=peer : il ne regarde que ce que le package livre réellement. Un npm audit nu remonte aussi l'outillage de build et les peer dependencies installées localement, qui ne sortent jamais du dépôt. Ne pas publier pour faire taire ces alertes.
Une vulnérabilité se corrige à la racine, pas par un override de confort. Un overrides déclaré ici serait de toute façon ignoré par npm au moment où un site installe le package : il ne vaut que depuis le package.json racine du site. Voir Sécurité.
Versionner
On suit semver. Tant que l'API peut encore changer, les paquets restent en 0.x, et semver y décale les niveaux d'un cran : c'est la version mineure qui signale un changement cassant.
| Niveau | Quand, en 0.x | Exemple |
|---|---|---|
patch 0.3.x | Correction de bug ou nouvelle fonctionnalité rétrocompatible. | 0.3.1 → 0.3.2 |
minor 0.x.0 | Changement cassant. | 0.3.2 → 0.4.0 |
major 1.0.0 | Stabilisation de l'API. | 0.9.4 → 1.0.0 |
À partir de 1.0.0, la règle redevient la règle habituelle : patch pour une correction, minor pour une fonctionnalité rétrocompatible, major pour un changement cassant.
npm version patch # ou minorLe retrait d'un sous-chemin de package.json#exports, le renommage d'un export, et tout changement de signature sont des changements cassants : un projet consommateur casse au build. En 0.x, ils montent la version mineure.
Les modules déclarent le core dans peerDependencies avec une plage bornée à la mineure, par exemple ">=0.3.0 <0.4.0" : npm ne laisse ainsi pas un core cassant s'installer sous un module qui ne le connaît pas.
Publier
npm publishprepublishOnly lance le build automatiquement. Si le build échoue, la publication est annulée, ce qui empêche de publier un dist/ périmé.
Le build produit aussi dist/docs/, donc la documentation publiée correspond exactement à la version du code. Voir Build et exports.
Script de commodité
Le dépôt expose un script release qui enchaîne la montée de version patch, la réinstallation, le commit, le push et la publication :
npm run releaseÀ n'utiliser que pour un patch. Une version mineure, donc cassante en 0.x, demande de passer par npm version explicitement.
Modules externes
Un @fraza/module-* suit la même procédure et le même registre. Un module Pro aussi, sous le scope @fraza-pro : son nom est @fraza-pro/module-*, et son publishConfig.registry pointe déjà vers le registre. Points spécifiques :
- Le champ
filesne publie quedist,LICENSEetTHIRD-PARTY-NOTICES.md.README.mdest ajouté par npm quel que soit le champ, et le core y ajoute.env.example. Chaque module porte son propre exemplaire des deux fichiers légaux : voir Licence et propriété. - Avant publication, vérifier que
dist/ne contient aucune syntaxe JSX brute. Voir Créer un module. - La documentation d'usage du module vit dans
docs/06-modules/du core, pas dans le dépôt du module. La mettre à jour et la publier avant de publier le module : sinon un projet installe un module dont la documentation décrit la version précédente. - Mettre à jour la version indiquée en tête de
docs/06-modules/<module>/index.md.
Administration du registre
Créer un utilisateur, déprécier une version, gérer les tags ou les droits : voir Registre Verdaccio.