PNPM : retour sur l’erreur Cannot find matching keyid

PNPM : retour sur l’erreur Cannot find matching keyid

Notre gestionnaire de déploiements continu (Gitlab) s’est, tout d’un coup, mis à voir tout rouge, sans raison apparente et surtout sur tous nos projets développés en JavaScript / TypeScript et utilisant PNPM comme gestionnaire de paquets. En regardant de prêt un message d’erreur est apparu : Error: Cannot find matching keyid

L’erreur complète

/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21535
  if (key == null || signature == null) throw new Error(`Cannot find matching keyid: ${JSON.stringify({ signatures, keys })}`);
                                              ^
Error: Cannot find matching keyid: {"signatures":[{"sig":"MEYCIQDkZyZZmBzkRcQowEEFiEcGp4/xV8GBLXxTEzz9QstrsAIhAPx6tvZixjTub6GPqJa82vcWFhUU39JCtoJvcoRK/K39","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"keys":[{"expires":null,"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","keytype":"ecdsa-sha2-nistp256","scheme":"ecdsa-sha2-nistp256","key":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1Olb3zMAFFxXKHiIkQO5cJ3Yhl5i6UPp+IhuteBJbuHcA5UogKo0EWtlWwW6KSaKoTNEYL7JlCQiVnkhBktUgg=="}]}
    at verifySignature (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21535:47)
    at fetchLatestStableVersion (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21553:5)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async fetchLatestStableVersion2 (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21672:14)
    at async Engine.getDefaultVersion (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:22298:23)
    at async Engine.executePackageManagerRequest (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:22396:47)
    at async Object.runMain (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:23102:5)
Node.js v22.13.1

D’où provient cette erreur ?

PNPM ont fait une rotation de leurs clés au niveau de NPM et de ce fait, la vérification de la signature échoue

Comment corriger ?

Mettre à jour PNPM et Corepack dans les dernières versions, en utilisant ces commandes

npm install -g corepack@latest

Pour vous prémunir de tout nouveau changement, vous pouvez mettre cela dans vos pipeline directement ou lancer cela de temps à autre sur votre environnement de développement. Ainsi, vous récupérerez toujours les corepack à jour

Une autre solution est d’utiliser une variable d’environnement COREPACK_INTEGRITY_KEYS=0. Cette variable va ignorer la vérification. Le mieux est quand même de garder la vérification mais cela peut servir dans certains cas !

Faire un singleton facilement avec NodeJS ou comment économiser des ressources ?
Adieu Yarn v1, bonjour PNPM
Docker, Python et FastAPI sont dans un bateau
NodeJS : maintenez vos packages.json à jour