diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 33a212d..50c4f14 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -1,64 +1,76 @@ #!/bin/bash set -e -echo "Starte MC2 Deployment..." +# ‼️ Das ganze Skript liegt in EINER Funktion — das ist Absicht, kein Stil. +# Bash liest ein Skript haeppchenweise WAEHREND es laeuft. `git pull` unten ersetzt +# genau diese Datei mitten im Lauf; danach liest bash am selben Byte-Offset im NEUEN +# Text weiter und fuehrt zerschnittene Zeilen aus. Live erlebt am 27.08.2026: der Pull +# brachte eine neue Fassung dieses Schrittes mit, ausgefuehrt wurde trotzdem die alte. +# Eine Funktion wird komplett geparst, bevor sie startet -> der Lauf bleibt in sich +# stimmig, und Aenderungen greifen ab dem naechsten Aufruf statt mittendrin. +main() { -# 1. Neuesten Code holen -git pull origin main + echo "Starte MC2 Deployment..." + + # 1. Neuesten Code holen + git pull origin main -# 2. Abhängigkeiten prüfen (falls sich was geändert hat) -echo "Aktualisiere Python Abhängigkeiten..." -backend/.venv/bin/pip install -r backend/requirements.txt + # 2. Abhängigkeiten prüfen (falls sich was geändert hat) + echo "Aktualisiere Python Abhängigkeiten..." + backend/.venv/bin/pip install -r backend/requirements.txt -# 3. Llama-Swap Konfiguration prüfen und synchronisieren -# -# ‼️ ACHTUNG (27.08.2026): /etc/llama-swap/config.yaml ist die LEBENDE Wahrheit — MC2 -# schreibt sie selbst (backend/services/llamaswap.py::write_config), sobald jemand über -# die Oberfläche ein Modell hinzufügt oder eine Rolle ändert. deploy/llama-swap.config.yaml -# ist nur ein Abzug und hinkt regelmäßig hinterher (aktuell fehlt ihm z. B. der -# `kritiker`/Devstral-Eintrag, den STACK.md und der Modell-Katalog voraussetzen). -# Bis hierher wurde die Live-Datei kommentarlos mit dem Abzug überschrieben — alles per -# UI Hinzugefügte war nach jedem Deploy weg. Jetzt: erst sichern, dann kopieren, und die -# Abweichung sichtbar machen. MC_DEPLOY_SKIP_SWAP_CONFIG=1 überspringt den Schritt ganz. -if ! cmp -s deploy/llama-swap.config.yaml /etc/llama-swap/config.yaml; then - if [ "${MC_DEPLOY_SKIP_SWAP_CONFIG:-0}" = "1" ]; then - echo "Llama-Swap Konfiguration weicht ab — uebersprungen (MC_DEPLOY_SKIP_SWAP_CONFIG=1)." - else - SWAP_BAK="/etc/llama-swap/config.yaml.bak-$(date +%Y%m%d-%H%M%S)" - echo "Llama-Swap Konfiguration hat sich geändert." - echo " Abweichung (live -> Repo-Abzug):" - diff -u /etc/llama-swap/config.yaml deploy/llama-swap.config.yaml | head -40 || true - echo " Sichere die laufende Datei nach $SWAP_BAK" - # NOPASSWD für llama-swap Neustart ist vorausgesetzt (siehe AGENTS.md) - sudo cp /etc/llama-swap/config.yaml "$SWAP_BAK" - sudo cp deploy/llama-swap.config.yaml /etc/llama-swap/config.yaml - sudo systemctl restart llama-swap - echo " Rueckweg bei Verlust: sudo cp $SWAP_BAK /etc/llama-swap/config.yaml" - fi -fi - -# 4. Systemd Units neu laden (falls sich .service Dateien geändert haben) -systemctl --user daemon-reload - -# 4.5 Hermes Skills synchronisieren -echo "Synchronisiere Hermes Skills..." -mkdir -p ~/.hermes/skills -# Kopiere alle Skills aus dem Repo, ersetze - durch _ in den Ordnernamen für Hermes Kompatibilität -for skill_dir in deploy/skills/*; do - if [ -d "$skill_dir" ]; then - skill_name=$(basename "$skill_dir" | tr '-' '_') - mkdir -p ~/.hermes/skills/"$skill_name" - cp -r "$skill_dir"/* ~/.hermes/skills/"$skill_name"/ + # 3. Llama-Swap Konfiguration prüfen und synchronisieren + # + # ‼️ ACHTUNG (27.08.2026): /etc/llama-swap/config.yaml ist die LEBENDE Wahrheit — MC2 + # schreibt sie selbst (backend/services/llamaswap.py::write_config), sobald jemand über + # die Oberfläche ein Modell hinzufügt oder eine Rolle ändert. deploy/llama-swap.config.yaml + # ist nur ein Abzug und hinkt regelmäßig hinterher (aktuell fehlt ihm z. B. der + # `kritiker`/Devstral-Eintrag, den STACK.md und der Modell-Katalog voraussetzen). + # Bis hierher wurde die Live-Datei kommentarlos mit dem Abzug überschrieben — alles per + # UI Hinzugefügte war nach jedem Deploy weg. Jetzt: erst sichern, dann kopieren, und die + # Abweichung sichtbar machen. MC_DEPLOY_SKIP_SWAP_CONFIG=1 überspringt den Schritt ganz. + if ! cmp -s deploy/llama-swap.config.yaml /etc/llama-swap/config.yaml; then + if [ "${MC_DEPLOY_SKIP_SWAP_CONFIG:-0}" = "1" ]; then + echo "Llama-Swap Konfiguration weicht ab — uebersprungen (MC_DEPLOY_SKIP_SWAP_CONFIG=1)." + else + SWAP_BAK="/etc/llama-swap/config.yaml.bak-$(date +%Y%m%d-%H%M%S)" + echo "Llama-Swap Konfiguration hat sich geändert." + echo " Abweichung (live -> Repo-Abzug):" + diff -u /etc/llama-swap/config.yaml deploy/llama-swap.config.yaml | head -40 || true + echo " Sichere die laufende Datei nach $SWAP_BAK" + # NOPASSWD für llama-swap Neustart ist vorausgesetzt (siehe AGENTS.md) + sudo cp /etc/llama-swap/config.yaml "$SWAP_BAK" + sudo cp deploy/llama-swap.config.yaml /etc/llama-swap/config.yaml + sudo systemctl restart llama-swap + echo " Rueckweg bei Verlust: sudo cp $SWAP_BAK /etc/llama-swap/config.yaml" fi -done + fi -# 5. Dienste neu starten -# ‼️ mc2-steward gehoert hier dazu: er laeuft aus DEMSELBEN Checkout (backend/steward.py). -# Ohne ihn lief der Waechter-Prozess nach jedem Deploy mit dem alten Code weiter — der -# Neustart wurde 27.08.2026 nachgetragen. `--user restart` auf einer nicht installierten -# Unit ist folgenlos, darum ohne Vorabpruefung. -echo "Starte Backend neu..." -systemctl --user restart mc2-gateway.service mission-control-2.service mc2-steward.service + # 4. Systemd Units neu laden (falls sich .service Dateien geändert haben) + systemctl --user daemon-reload -echo "✅ Deployment erfolgreich abgeschlossen!" + # 4.5 Hermes Skills synchronisieren + echo "Synchronisiere Hermes Skills..." + mkdir -p ~/.hermes/skills + # Kopiere alle Skills aus dem Repo, ersetze - durch _ in den Ordnernamen für Hermes Kompatibilität + for skill_dir in deploy/skills/*; do + if [ -d "$skill_dir" ]; then + skill_name=$(basename "$skill_dir" | tr '-' '_') + mkdir -p ~/.hermes/skills/"$skill_name" + cp -r "$skill_dir"/* ~/.hermes/skills/"$skill_name"/ + fi + done + + # 5. Dienste neu starten + # ‼️ mc2-steward gehoert hier dazu: er laeuft aus DEMSELBEN Checkout (backend/steward.py). + # Ohne ihn lief der Waechter-Prozess nach jedem Deploy mit dem alten Code weiter — der + # Neustart wurde 27.08.2026 nachgetragen. `--user restart` auf einer nicht installierten + # Unit ist folgenlos, darum ohne Vorabpruefung. + echo "Starte Backend neu..." + systemctl --user restart mc2-gateway.service mission-control-2.service mc2-steward.service + + echo "✅ Deployment erfolgreich abgeschlossen!" +} + +main "$@"