lecoffre_node/scripts/sync-vault-full.sh
2025-10-02 15:31:54 +00:00

95 lines
3.6 KiB
Bash

#!/usr/bin/env sh
set -euo pipefail
# Déterminer la racine du projet (4NK_env) relativement à ce script
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
REPO_URL="https://git.4nkweb.com/4nk/4NK_vault.git"
VAULT_ROOT="$ROOT_DIR/vault"
SDK_DIR="$VAULT_ROOT/sdk-client"
CONFS_DIR="$ROOT_DIR/confs"
VAULT_ENV_FILE="$VAULT_ROOT/.env"
SYNC_JS="$ROOT_DIR/scripts/sync-vault-configs.js"
# 0) Charger l'env Vault si présent (VAULT_BASE_URL, VAULT_USER/VAULT_USER_ID, VAULT_ENV, etc.)
if [ -f "$VAULT_ENV_FILE" ]; then
set -a
. "$VAULT_ENV_FILE"
set +a
fi
# 1) Cloner / mettre à jour le dépôt directement dans vault/
mkdir -p "$VAULT_ROOT"
if [ -d "$VAULT_ROOT/.git" ]; then
echo "[git] Mise à jour du dépôt existant dans $VAULT_ROOT"
git -C "$VAULT_ROOT" remote set-url origin "$REPO_URL" 2>/dev/null || true
git -C "$VAULT_ROOT" fetch --prune origin
git -C "$VAULT_ROOT" checkout -B master origin/master
git -C "$VAULT_ROOT" reset --hard origin/master
else
echo "[git] Initialisation du dépôt dans $VAULT_ROOT"
git -C "$VAULT_ROOT" init
git -C "$VAULT_ROOT" remote add origin "$REPO_URL" 2>/dev/null || git -C "$VAULT_ROOT" remote set-url origin "$REPO_URL"
git -C "$VAULT_ROOT" fetch --depth 1 origin master
git -C "$VAULT_ROOT" checkout -B master origin/master
fi
# 2) Construire le SDK client (TypeScript)
if [ ! -d "$SDK_DIR" ]; then
echo "[ERROR] Dossier sdk-client introuvable dans le dépôt $VAULT_ROOT"
exit 2
fi
cd "$SDK_DIR"
# Rebuild propre avant la compilation pour garantir un état cohérent
echo "[build] Nettoyage du SDK client (node_modules, dist)"
rm -rf node_modules dist 2>/dev/null || true
# Installer et compiler (essayer npm ci, sinon npm install)
echo "[build] Installation des dépendances du SDK client"
npm ci --no-audit --progress=false || npm install --no-audit --progress=false
echo "[build] Compilation TypeScript du SDK client"
npx tsc || ./node_modules/.bin/tsc
# 3) Démo: init/routes/sync locale (écrit sous vault/confs)
node "$SDK_DIR/dist/examples/usage.js" || true
# 4) Copier le miroir local vers confs si présent; sinon fallback sync directe via SDK local
mkdir -p "$CONFS_DIR"
if [ -d "$VAULT_ROOT/confs" ]; then
echo "[copy] Synchronisation $VAULT_ROOT/confs -> $CONFS_DIR"
rm -rf "$CONFS_DIR"
mkdir -p "$CONFS_DIR"
cp -a "$VAULT_ROOT/confs/." "$CONFS_DIR/"
rm -rf "$VAULT_ROOT/confs"
echo "[cleanup] Suppression du miroir $VAULT_ROOT/confs"
else
echo "[fallback] Miroir inexistant, tentative de sync directe via SDK"
if [ -f "$SYNC_JS" ]; then
node "$SYNC_JS" || true
else
echo "[WARN] Script de sync SDK introuvable: $SYNC_JS"
fi
# Si le SDK a synchronisé dans vault/confs2, propager vers CONFS_DIR
if [ -d "$VAULT_ROOT/confs2" ]; then
echo "[copy] Synchronisation fallback $VAULT_ROOT/confs2 -> $CONFS_DIR"
rm -rf "$CONFS_DIR"
mkdir -p "$CONFS_DIR"
cp -a "$VAULT_ROOT/confs2/." "$CONFS_DIR/"
fi
fi
# 4bis) Répliquer les fichiers synchronisés dans le dossier du projet lecoffre_node si requis
LECOFFRE_NODE_CONFS_DIR="$ROOT_DIR/projects/lecoffre/lecoffre_node/confs"
echo "[copy] Réplication vers $LECOFFRE_NODE_CONFS_DIR"
rm -rf "$LECOFFRE_NODE_CONFS_DIR"
mkdir -p "$LECOFFRE_NODE_CONFS_DIR"
# Si le dossier fallback existe, répliquer directement depuis celui-ci pour éviter les permissions sur $CONFS_DIR
if [ -d "$VAULT_ROOT/confs2" ]; then
cp -a "$VAULT_ROOT/confs2/." "$LECOFFRE_NODE_CONFS_DIR/"
else
cp -a "$CONFS_DIR/." "$LECOFFRE_NODE_CONFS_DIR/"
fi
echo "[OK] Sync Vault terminée vers $CONFS_DIR et répliquée vers $LECOFFRE_NODE_CONFS_DIR"