fokan/.github/workflows
Gautier Stefanini df613bb99c Un hook d'installation s'exécutait avant la première ligne du projet
Le ver « ChainDrop » publié sur npm le 4 août au matin partait d'un hook
`preinstall` sur `keyv`, `cacheable`, `flat-cache` et `file-entry-cache`, volait
les jetons npm et GitHub, les clés SSH et les chaînes de connexion, puis se
republiait avec ce qu'il venait de prendre — plus de 1 300 versions en une
matinée.

fokan n'a pas été touché, et il faut dire pourquoi : `node_modules` et le lock
dataient du 29/07, six jours avant la fenêtre, et `npm ci` résout depuis le lock.
Les trois paquets sont pourtant bien là, en transitif sous ESLint, chacun tiré
par un `^`. Un seul `npm install` ce jour-là aurait suffi. `ignore-scripts=true`
rend désormais un paquet compromis inerte tant que rien ne l'importe ; les trois
qui ont réellement besoin de leur binaire sont reliés nommément par `npm rebuild`
dans la CI et dans les deux étages du Dockerfile.

Séparément, le `COPY . .` du builder emportait tout le répertoire de travail dans
une couche de l'image : le `.env` de développement — gitignoré, donc bien présent
sur le disque — devenait lisible par n'importe quel script de build, et le
`node_modules` de l'hôte écrasait celui que `npm ci` venait d'installer à la ligne
précédente. Un `.dockerignore` ferme les deux.

Au passage, les actions GitHub sont épinglées au commit et non au tag — un tag est
mutable, c'est le `^` de npm sous un autre nom — et le jeton du runner passe en
lecture seule.

D-047.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:03:57 +00:00
..
ci.yml Un hook d'installation s'exécutait avant la première ligne du projet 2026-08-05 21:03:57 +00:00