fokan/.dockerignore
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

26 lines
784 B
Text

# Le `COPY . .` du builder emportait tout le répertoire de travail dans une couche de l'image
# (D-047, 5 août 2026). Deux effets : 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.
# Secrets — jamais dans une image, y compris l'exemple qui n'y sert à rien.
.env
.env.*
# Réinstallé dans l'image par `npm ci`, jamais copié depuis l'hôte.
node_modules
# Artefacts de build et caches locaux.
.next
dist
*.tsbuildinfo
*.log
coverage
# Sans usage à l'exécution : `docs/` n'est cité que dans des commentaires, jamais lu par le code.
.git
.github
.claude
docs
README.md
CLAUDE.md