#!/usr/bin/env bash # nuc-sync-leadtech.sh # À exécuter SUR LE NUC (docker-dev), via cron ou à la demande. # # Rôle : maintenir le clone Lead_tech du NUC à jour ET rafraîchir l'index du MCP # sans redémarrer le conteneur. # # 1. git pull --ff-only → récupère la doctrine poussée depuis le Mac (ou ailleurs) # 2. rebuild de l'index → le serveur MCP sert la connaissance fraîche au prochain # get_guidance (l'index est lu à chaque appel) # # Tue le "yoyo git pull" : tu push depuis le Mac, le NUC suit tout seul. # # Installation cron (sur le NUC) : # crontab -e # */3 * * * * /srv/helpers/_Assistant_Lead_Tech/scripts/nuc-sync-leadtech.sh >> /srv/helpers/_Assistant_Lead_Tech/.nuc-sync.log 2>&1 set -euo pipefail REPO="/srv/helpers/_Assistant_Lead_Tech" CONTAINER="leadtech-bmad-mcp" TS() { date '+%Y-%m-%d %H:%M:%S'; } cd "$REPO" || { echo "[$(TS)] ✗ repo introuvable : $REPO"; exit 1; } # ─── 1. Pull (fast-forward only — jamais de merge auto qui pourrait diverger) ── # On ne pull QUE s'il y a du nouveau, pour ne pas spammer le log ni rebuild pour rien. git fetch origin --quiet LOCAL="$(git rev-parse @)" REMOTE="$(git rev-parse '@{u}')" if [ "$LOCAL" = "$REMOTE" ]; then # Déjà à jour : rien à faire (sortie silencieuse pour ne pas polluer le log cron) exit 0 fi echo "[$(TS)] ↓ nouveau commit distant détecté, pull…" if ! git merge --ff-only origin/"$(git rev-parse --abbrev-ref HEAD)" --quiet; then echo "[$(TS)] ✗ ff-only impossible (divergence locale sur le NUC ?). Intervention manuelle requise." echo "[$(TS)] → un commit local non poussé existe peut-être sur le NUC. Vérifier 'git status'." exit 1 fi echo "[$(TS)] ✓ pull OK → $(git rev-parse --short HEAD)" # ─── 2. Rebuild de l'index dans le conteneur (sans restart) ─────────────────── if docker ps --filter "name=$CONTAINER" --format '{{.Names}}' | grep -q "^$CONTAINER$"; then if docker exec "$CONTAINER" leadtech-bmad-build-index >/dev/null 2>&1; then echo "[$(TS)] ✓ index MCP reconstruit (conteneur $CONTAINER, sans restart)" else echo "[$(TS)] ⚠ rebuild index échoué dans $CONTAINER — le MCP sert l'ancien index jusqu'au prochain restart." fi else echo "[$(TS)] ⚠ conteneur $CONTAINER non actif — pull fait, index non reconstruit." fi