From f0f57f170cc52dcb00c13b8c210818362b9f59df Mon Sep 17 00:00:00 2001 From: Nicolas Date: Fri, 18 Sep 2026 14:06:19 +0200 Subject: [PATCH] Corriger pnpm-lock.yaml : entree manquante pour service-registry pnpm 12.4.2 n'ecrivait pas d'entree importers pour packages/common/service-registry dans le lockfile, meme apres suppression complete du lockfile et du cache d'etat pnpm puis reinstallation (pnpm ls -r reconnaissait pourtant bien le package). CI echouait avec --frozen-lockfile (erreur has no importers[...] entry), alors que le pnpm install local sans --frozen-lockfile ne se plaignait de rien. Cause probable : ce package ne declarait aucune dependency ni devDependency propre. Remede : declarer explicitement quelques devDependencies (typescript, vitest, @types/node via catalog:), meme deja hoistees depuis la racine. create-package.mjs generera desormais ces devDependencies par defaut pour tout nouveau package, et le troubleshooting est documente dans spec/ci-cd.md. Co-Authored-By: Claude Sonnet 5 --- packages/common/service-registry/package.json | 5 +++++ pnpm-lock.yaml | 12 ++++++++++++ scripts/create-package.mjs | 9 +++++++++ spec/ci-cd.md | 4 ++++ 4 files changed, 30 insertions(+) diff --git a/packages/common/service-registry/package.json b/packages/common/service-registry/package.json index 9229ff2..4639f23 100644 --- a/packages/common/service-registry/package.json +++ b/packages/common/service-registry/package.json @@ -19,5 +19,10 @@ "src/index.ts" ], "readme": "README.md" + }, + "devDependencies": { + "@types/node": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ffb60f..ed2304f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -211,6 +211,18 @@ importers: packages/client/web-component: {} + packages/common/service-registry: + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 22.20.3 + typescript: + specifier: 'catalog:' + version: 5.9.3 + vitest: + specifier: 'catalog:' + version: 2.1.9(@types/node@22.20.3) + packages: '@babel/runtime@7.29.7': diff --git a/scripts/create-package.mjs b/scripts/create-package.mjs index d7555c0..a3e7618 100644 --- a/scripts/create-package.mjs +++ b/scripts/create-package.mjs @@ -53,6 +53,15 @@ const packageJson = { entryPoints: ['src/index.ts'], readme: 'README.md', }, + // Déclarées explicitement (même si déjà présentes à la racine, où elles + // seraient hoistées) : un package workspace sans aucune dépendance propre + // peut se retrouver sans entrée dans pnpm-lock.yaml, ce qui casse + // `pnpm install --frozen-lockfile` en CI (voir spec/ci-cd.md). + devDependencies: { + '@types/node': 'catalog:', + typescript: 'catalog:', + vitest: 'catalog:', + }, }; writeFileSync(join(packageDir, 'package.json'), `${JSON.stringify(packageJson, null, '\t')}\n`); diff --git a/spec/ci-cd.md b/spec/ci-cd.md index 81e7cab..ebaf326 100644 --- a/spec/ci-cd.md +++ b/spec/ci-cd.md @@ -35,6 +35,10 @@ Pas de bot automatique type `changesets/action` (spécifique GitHub, incertain s 1. Forgejo → Settings → Applications → générer un token avec les scopes `write:package` + `read:package`. 2. L'ajouter comme secret de repo nommé `REGISTRY_TOKEN` sur **ce** repo (`lightweight-sdk`) — les secrets de repo ne sont pas partagés entre repos sur cette instance ; celui de `watchparty` ne peut pas être réutilisé tel quel. +### Troubleshooting : `pnpm-lock.yaml` sans entrée pour un nouveau package + +Si `pnpm install --frozen-lockfile` échoue en CI avec `pnpm-lock.yaml has no importers["packages//"] entry` alors que `pnpm install` (sans `--frozen-lockfile`) fonctionne en local sans se plaindre : un package workspace **sans aucune `dependencies`/`devDependencies` propre** peut ne pas obtenir d'entrée dans le lockfile généré par pnpm 12.4.2, même après suppression complète du lockfile et réinstallation. Constaté en ajoutant `@lightweight-sdk/service-registry` (package.json sans champ de dépendances du tout). Remède : déclarer explicitement quelques `devDependencies` (ex. `typescript`, `vitest` via `catalog:`) même si elles seraient de toute façon hoistées depuis la racine — `create-package.mjs` le fait automatiquement pour tout nouveau package. Vérifier avant de pousser : `pnpm install --frozen-lockfile` en local doit passer, pas seulement `pnpm install`. + ### Troubleshooting : 404 sur un package scopé Si `pnpm changeset:publish` échoue avec une 404 sur un nom de package scopé (`@lightweight-sdk/...`), la cause probable est le reverse proxy devant l'instance : npm encode le `/` d'un nom scopé en `%2F`, ce qu'Apache refuse par défaut. Vérifier `AllowEncodedSlashes NoDecode` dans le VirtualHost et `nocanon` sur la directive `ProxyPass`. Ce point n'a pas pu être vérifié depuis l'agent (config réseau propre à l'instance).