**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
36 lines
1.5 KiB
Markdown
36 lines
1.5 KiB
Markdown
## Contexte
|
||
|
||
Le script `deploy.sh` exécute un déploiement sur le serveur (pull Git, installation, build, restart).
|
||
Lors d’un 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 n’est pas géré comme source de vérité et l’état du workspace serveur peut être incohérent.
|
||
|
||
## Correctifs
|
||
|
||
- Suppression de l’upgrade 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 d’analyse
|
||
|
||
- 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.
|