diff --git a/scripts/sync-vault-full.sh b/scripts/sync-vault-full.sh new file mode 100644 index 0000000..83b8ff8 --- /dev/null +++ b/scripts/sync-vault-full.sh @@ -0,0 +1,81 @@ +#!/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 +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" +cp -a "$CONFS_DIR/." "$LECOFFRE_NODE_CONFS_DIR/" + +echo "[OK] Sync Vault terminée vers $CONFS_DIR et répliquée vers $LECOFFRE_NODE_CONFS_DIR"