feat(nuc): script de sync auto Lead_tech sur le NUC (pull + rebuild index)

scripts/nuc-sync-leadtech.sh (à exécuter SUR le NUC, via cron) :
- git pull --ff-only du clone /srv/helpers/_Assistant_Lead_Tech
- rebuild de l'index MCP dans le conteneur (docker exec leadtech-bmad-build-index)
  SANS restart → get_guidance sert la doctrine fraîche au prochain appel

Élimine le "yoyo git pull" : push depuis le Mac → le NUC suit tout seul, et la
connaissance capitalisée devient disponible côté MCP sans redémarrage.
Ne pull que s'il y a du nouveau (pas de rebuild inutile) ; ff-only strict pour
ne jamais créer de divergence silencieuse.

Installation cron documentée dans l'en-tête du script.
This commit is contained in:
MaksTinyWorkshop
2026-06-26 11:55:38 +02:00
parent 6a937d211c
commit 91cdc6637b
+54
View File
@@ -0,0 +1,54 @@
#!/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