Files
mission-control-v2/deploy/pruefen.sh
T
HitonabiandClaude Opus 5.5 5e9227c4a3 phase3+4: Homelab-Teil (Ausfuehrer, Ziele, Jetzt updaten mit Rueckweg) und Seite Homelab fuer alle Geraete
- deploy/homelab/ausfuehrer.py: laeuft als root auf dem Proxmox-Host, holt Auftraege beim Homelab-Teil
  ab (Pull, kein offener Port), feste Aktionsliste, prueft Etiketten selbst; Bericht gegen den echten
  Host erprobt (nur lesend). Kein Proxmox-Schluessel im Container noetig.
- services/homelab: Kanal mit gemeinsamem Geheimnis, App-Katalog, Inventar -> Ziele im gemeinsamen
  Modell (GitHub-Versionen, Webpruefung, alte Paketlisten = unklar), Jetzt updaten: Snapshot ->
  Update -> Pruefung -> bei Rot zurueck + dringende Meldung
- Waechter in der Rolle homelab: Ausfuehrer schweigt, Gaeste antworten nicht
- kern/github.py fuer beide Rollen (auch untagged Releases mit Version im Namen)
- Oberflaeche: Seite Homelab zeigt alle Geraete als Karten (KI-Box ueber /api/ziele, Homelab ueber
  /api/homelab/ziele) mit Stand, Rueckweg und Knopf samt Rueckfrage
- Einrichtung als Skripte (container-anlegen, ausrollen, ausfuehrer-einrichten, box-partner) — noch
  nicht ausgefuehrt, jeder Schritt braucht das User-OK
- frontend-bauen-box.sh: Frontend-Pruefung und Build auf der Box, wenn der PC keinen Speicher hat

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 18:39:59 +02:00

57 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# pruefen.sh — das Prüftor (seit 24.09.2026, ersetzt die tote CI-Ampel).
#
# Läuft am PC vor dem Push und auf der Box in deploy.sh vor dem Umschalten. Rot = kein Deploy.
# Prüft: Shell-Syntax, Python-Syntax, Lint (wo ruff installiert ist), dass alle Dienste sich
# importieren lassen, und die Tests.
set -uo pipefail
cd "$(dirname "$0")/.."
WURZEL="$(pwd)"
PY="${MC_PRUEF_PYTHON:-}"
if [ -z "$PY" ]; then
for k in backend/.venv/bin/python backend/.venv/Scripts/python.exe; do
[ -x "$k" ] && PY="$WURZEL/$k" && break
done
fi
[ -n "$PY" ] || { echo "✗ Kein Python im backend/.venv gefunden."; exit 1; }
fehler=0
schritt() { echo "── $1"; }
schritt "Syntax der Shell-Skripte"
for f in deploy/*.sh deploy/jobs/*.sh deploy/homelab/*.sh; do
bash -n "$f" || { echo " ✗ $f"; fehler=1; }
done
schritt "Python-Syntax"
# Außerhalb eines Git-Checkouts (Probelauf eines Abzugs auf der Box) alle .py-Dateien nehmen.
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
git ls-files '*.py' | grep -v '^frontend/' | xargs "$PY" -m py_compile || fehler=1
else
find . -name '*.py' -not -path './frontend/*' -not -path '*/.venv/*' -not -path '*/node_modules/*' -print0 \
| xargs -0 "$PY" -m py_compile || fehler=1
fi
schritt "Lint (ruff)"
if command -v ruff >/dev/null 2>&1; then
ruff check . || fehler=1
else
echo " ruff ist hier nicht installiert — übersprungen (am PC läuft er)."
fi
schritt "Dienste lassen sich laden"
MODELS_PROBE="${MC_PRUEF_MODELS_DIR:-${TMPDIR:-/tmp}/mc2-pruefen}"
mkdir -p "$MODELS_PROBE"
( cd backend && MC_MODELS_DIR="$MODELS_PROBE" "$PY" -c "import app, gateway_app, steward, radar_lauf" ) || fehler=1
schritt "Tests"
"$PY" -m pytest backend/tests -q -p no:cacheprovider || fehler=1
if [ "$fehler" = 0 ]; then
echo "✅ Prüftor grün"
else
echo "✗ Prüftor rot"
exit 1
fi