Files
mission-control-v2/deploy/deploy.sh
T
HitonabiandClaude Opus 5.5 45b5bf275c
Ampel / ampel (push) Successful in 26s
phase1a: Box-Diaet - schlafende Dienste, Sonntags-Update als Timer, tote Skills raus, Warm-Set nur Hirn
- Waechter und Dienste-Liste kennen "schlaeft": abgeschaltete Units (disable --now) sind kein
  Befund mehr; die Oberflaeche zeigt sie grau mit Knopf "Wecken" (fuer die Android-App spaeter).
- Updates am Sonntag laufen wieder ueber mc2-autoupdate.timer (jobs/sonntags-update.sh) statt als
  Hermes-Cron, der sich beim Hermes-Update selbst neu startete (20.09.: 180 s, Fehlschlag).
  Flugplan und Waechter kennen den Timer.
- 10 abgeloeste Skills (Werkstatt, Kanban, Orchestrator, Trend-Radar ...) aus dem Repo; deploy.sh
  verschiebt sie in ~/.hermes/skills-archiv statt sie weiter zu Lucy zu kopieren.
- Embedding und Reranker schlafen: raus aus brains und Warm-Set, ttl 300, warmup.sh waermt sie
  nicht mehr vor. deploy.sh spielt Timer und Warm-Set-Drop-in selbst aus.
- Dienste-Namen: "Box-Wart (MC2)", "Hermes-Dashboard", "Spracherkennung (Desktop-Lucy)".
- Frontend neu gebaut (npm ci, lokale Pakete waren vom 28.08.).

Tests: 87 gruen (neu: schlafende Dienste), Frontend Lint/Tests/Build gruen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 14:50:37 +02:00

107 lines
5.7 KiB
Bash

#!/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)
# Das Modell-Radar (09/2026) ist die erste Unit, die deploy.sh selbst einspielt: Sie gehört ganz dem
# Repo, auf der Box wird an ihr nichts von Hand gedreht. Die übrigen Units bleiben wie bisher Handarbeit.
install -m 644 deploy/mc2-radar.service deploy/mc2-radar.timer "$HOME/.config/systemd/user/"
# Morgenmeldung (24.09.2026): schickt um 07:00, was notify.sh nachts gesammelt hat.
install -m 644 deploy/mc2-morgenmeldung.service deploy/mc2-morgenmeldung.timer "$HOME/.config/systemd/user/"
# Updates am Sonntag (24.09.2026): eigener Timer statt Hermes-Cron.
install -m 644 deploy/mc2-autoupdate.service deploy/mc2-autoupdate.timer "$HOME/.config/systemd/user/"
# Warm-Set des Wächters (24.09.2026: nur noch das Hirn).
install -D -m 644 deploy/mc2-steward.service.d-warmset.conf "$HOME/.config/systemd/user/mc2-steward.service.d/warmset.conf"
systemctl --user daemon-reload
systemctl --user enable --now mc2-radar.timer mc2-morgenmeldung.timer mc2-autoupdate.timer
# 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
# Abgelöste Skills (24.09.2026) aus Lucys Skill-Index nehmen: verschoben nach
# ~/.hermes/skills-archiv, nicht gelöscht. Dazu die alten Bindestrich-Doppel der übrigen Skills
# (deploy.sh schreibt seit jeher die Unterstrich-Fassung).
for alt in autonomie konzept-fliessband llm-wiki morning-report orchestrator projekt-start \
pruefstand review trend-radar wartung konzept_fliessband llm_wiki morning_report \
projekt_start trend_radar betrieb-playbook pc-pfad-cache; do
if [ -d ~/.hermes/skills/"$alt" ]; then
mkdir -p ~/.hermes/skills-archiv
rm -rf ~/.hermes/skills-archiv/"$alt"
mv ~/.hermes/skills/"$alt" ~/.hermes/skills-archiv/
fi
done
# 4.6 Hermes-Plugins aus dem Repo (09/2026: mc2-web-lesen, Seiten lokal lesen für web_extract).
# Nur kopieren: Aktiviert wird ein Plugin einmalig von Hand (hermes plugins enable …), und neuer
# Plugin-Code greift erst beim nächsten Neustart des Hermes-Gateways — den macht deploy.sh bewusst nicht.
mkdir -p ~/.hermes/plugins
for plugin_dir in deploy/hermes-plugins/*; do
[ -d "$plugin_dir" ] && cp -r "$plugin_dir" ~/.hermes/plugins/
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 "$@"