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 !