#!/bin/bash set -e # ‼️ 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() { 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 # 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 (erlebt: der Coder-Vollkontext aus 34a9862 # stand tagelang nur live, nicht im Abzug — ein Deploy hätte ihn zurückgesetzt). # 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"/ 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 "$@"