Ampel / ampel (push) Failing after 21s
Suche aus Merkliste (deploy/radar-watchlist.json) und Hugging-Face-Entdeckung; nur Kandidaten mit Bild-Projektor, die neben das Warm-Set passen (<= 115 GB inkl. KV-Cache). Nachtlauf mc2-radar.timer 00:30, Tests nur bis 02:30 (um 03:00 kommt NerdQuiz), hoechstens ein neuer Kandidat pro Woche, Notbremse 02:35, RuntimeMaxSec als letzte Sicherung. Pruefstand als Modul (deploy/bench/pruefstand.py): Tempo, Werkzeuge, Deutsch/JSON bzw. Programmieraufgaben und Bild-Probe gegen das heutige Modell der Rolle. Durchgefallene werden geloescht, Bestandene gemeldet und erst nach "Uebernehmen" getauscht. Beim Uebernehmen wandern die Zweitrollen mit (fast beim Hirn, heavy beim Coder), und das Warm-Set des Stewards wird selbst umgestellt statt als Handgriff zu bleiben. Modell-Code im Pruefstand darf keine Prozesse starten (RLIMIT_NPROC=0). Radar steht im Flugplan und unter Waechter-Aufsicht; deploy.sh spielt seine Units ein. Oberflaeche: Vergleichswerte je Kandidat, Rueckfrage vor Uebernehmen und Verwerfen, Status auf Deutsch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
81 lines
4.0 KiB
Bash
81 lines
4.0 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/"
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable --now mc2-radar.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
|
|
|
|
# 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 "$@"
|