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 !




