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
This commit is contained in:
Nicolas Cantu 2026-01-13 17:29:53 +01:00
parent 6e649df0af
commit 398e0dd1de
2 changed files with 41 additions and 23 deletions

View File

@ -143,40 +143,23 @@ echo ""
echo "11. Dernier commit:"
ssh_exec "cd ${APP_DIR} && git log -1 --oneline"
# Copier next.config.js local vers le serveur (pour ignorer ESLint pendant le build)
echo ""
echo "12. Mise à jour de next.config.js pour ignorer ESLint pendant le build..."
if [ -f "next.config.js" ]; then
cat next.config.js | ssh_exec "cat > ${APP_DIR}/next.config.js"
echo " ✓ next.config.js mis à jour"
else
echo " ⚠ next.config.js local non trouvé, utilisation de celui du serveur"
fi
echo "12. Installation des dépendances (reproductible via lockfile)..."
ssh_exec "cd ${APP_DIR} && npm ci"
# Mettre à jour les dépendances aux dernières versions
echo ""
echo "13. Mise à jour des dépendances aux dernières versions..."
ssh_exec "cd ${APP_DIR} && npx -y npm-check-updates -u || true"
# Installer les dépendances
echo ""
echo "14. Installation des dépendances..."
ssh_exec "cd ${APP_DIR} && npm install"
# Construire l'application
echo ""
echo "15. Construction de l'application..."
echo "13. Construction de l'application..."
ssh_exec "cd ${APP_DIR} && npm run build"
# Redémarrer le service
echo ""
echo "16. Redémarrage du service ${APP_NAME}..."
echo "14. Redémarrage du service ${APP_NAME}..."
ssh_exec "sudo systemctl restart ${APP_NAME}"
sleep 3
# Vérifier que le service fonctionne
echo ""
echo "17. Vérification du service..."
echo "15. Vérification du service..."
if ssh_exec "sudo systemctl is-active ${APP_NAME} >/dev/null"; then
echo " ✓ Service actif"
echo ""
@ -190,7 +173,7 @@ fi
# Vérifier que le port est en écoute
echo ""
echo "18. Vérification du port 3001..."
echo "16. Vérification du port 3001..."
if ssh_exec "sudo ss -tuln | grep -q ':3001 '"; then
echo " ✓ Port 3001 en écoute"
else

View File

@ -0,0 +1,35 @@
## 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.