From fbebe31ef33fcbb82acc050090209e637bb786ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zachary=20Gu=C3=A9not?= Date: Sun, 13 Sep 2026 16:46:38 +0200 Subject: [PATCH] chore(ops): fail early on a stale Node and compare migrations per dialect Co-Authored-By: Claude Opus 5 --- ops/deploy-lxc.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ops/deploy-lxc.sh b/ops/deploy-lxc.sh index ef747f64b..1be7c7039 100755 --- a/ops/deploy-lxc.sh +++ b/ops/deploy-lxc.sh @@ -37,11 +37,26 @@ cd "$REPO" } echo "Commit déployé : $(git log --oneline -1)" +# Le dépôt exige un Node récent (champ engines.node). Le Node par défaut du poste +# est plus ancien que ça : sans ce contrôle, l'échec surviendrait au milieu du +# build, avec un message de pnpm qui ne dit pas quoi faire. +required_node="$(grep -oP '^node = "\K[^"]+' "$REPO/mise.toml" 2>/dev/null || echo '24.18.0')" +if ! node -e "process.exit(process.versions.node.localeCompare('$required_node', undefined, { numeric: true }) < 0 ? 1 : 0)"; then + echo "Node $(node -v) est trop ancien — il en faut au moins v$required_node." >&2 + echo "Par exemple : export PATH=\"\$HOME/.local/share/nvm/v24.20.0/bin:\$PATH\"" >&2 + exit 1 +fi + # Une migration présente ici et absente en prod n'est pas bloquante — Homarr les # applique au démarrage — mais elle rend le rollback non trivial : restaurer # l'archive ne défait pas un schéma déjà migré. On veut le savoir AVANT. -local_migration="$(find packages/db/migrations -name '*.sql' -printf '%f\n' | sort | tail -1)" -remote_migration="$(ssh "$HOST" "find $REMOTE_DIR/db/migrations -name '*.sql' -printf '%f\n' | sort | tail -1")" +# +# Comparaison par dialecte : la prod embarque les migrations de tous les moteurs, +# et prendre le maximum toutes dialectes confondues masquerait une divergence +# propre à celui qui tourne réellement. +DIALECT="${HOMARR_DB_DIALECT:-sqlite}" +local_migration="$(find "packages/db/migrations/$DIALECT" -name '*.sql' -printf '%f\n' | sort | tail -1)" +remote_migration="$(ssh "$HOST" "find $REMOTE_DIR/db/migrations/$DIALECT -name '*.sql' -printf '%f\n' | sort | tail -1")" echo "Dernière migration — locale : $local_migration | prod : $remote_migration" if [ "$local_migration" != "$remote_migration" ]; then echo