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 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.