story-research-zapwall/fixKnowledge/2026-01-13-deploy-sh-ncu-eresolve.md
Nicolas Cantu 398e0dd1de Fix deploy.sh to avoid dependency upgrades in production
**Motivations:**
- Make deployments reproducible and prevent production-only dependency drift

**Root causes:**
- deploy.sh ran npm-check-updates -u on the server, then npm install hit ERESOLVE

**Correctifs:**
- Remove npm-check-updates step
- Switch npm install to npm ci
- Stop copying next.config.js over SSH (use Git version)

**Evolutions:**
- Add fixKnowledge note explaining the failure mode and remediation

**Pages affectées:**
- deploy.sh
- fixKnowledge/2026-01-13-deploy-sh-ncu-eresolve.md
2026-01-13 17:29:53 +01:00

1.5 KiB
Raw Permalink Blame History

Contexte

Le script deploy.sh exécute un déploiement sur le serveur (pull Git, installation, build, restart). Lors dun déploiement, npm install échoue avec ERESOLVE après une mise à jour automatique des dépendances.

Impact

  • Déploiement interrompu avant npm run build
  • Service non redémarré, donc absence de mise en production effective
  • Risque de dérive des versions en production (package.json modifié côté serveur, hors Git)

Root cause

deploy.sh exécutait sur le serveur :

  • npx npm-check-updates -u : modification de package.json en production (hors contrôle Git)
  • puis npm install : résolution de dépendances conflictuelles (ERESOLVE) car le lockfile nest pas géré comme source de vérité et létat du workspace serveur peut être incohérent.

Correctifs

  • Suppression de lupgrade automatique des dépendances (npm-check-updates) pendant le déploiement.
  • Remplacement de npm install par npm ci pour utiliser strictement le lockfile et garantir un déploiement reproductible.
  • Suppression de létape qui copiait next.config.js via SSH (le fichier doit venir de Git via git pull).

Pages affectées

  • deploy.sh

Modalités danalyse

  • Sur un déploiement en échec : rechercher ERESOLVE could not resolve dans la sortie npm install.
  • Vérifier si deploy.sh modifie des fichiers côté serveur après git pull (anti-pattern car divergence hors Git).

Modalités de déploiement

  • Rejouer ./deploy.sh "<message>" après commit/push des modifications du script.