Build: Windows Portable-Build (§30.2) + Frontend-Tests (§17.10)
- build_portable.sh: Nuitka Onefolder (ADR-0005), 5 Schritte: uv sync -> Frontend -> Rust (cargo optional) -> Nuitka -> GStreamer-Buendelung + portable Struktur + SHA-256 + ZIP - Portable Struktur (§9): PORTABLE_MODE, runtime/gstreamer, web/, plugins/, projects/, media/, userdata/, config/, logs/, licenses/ - Frontend-Tests: Vitest + Testing Library, 9 Tests: LayerTable (10 Spalten, Selektion, 7 Zustaende, Screen-Reader), StatusBar (FPS 2 Dezimalstellen, Quality Auto, Art-Net-Status) - Gesamtsuite 595 Python + 9 Vitest gruen
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
#!/bin/bash
|
||||
# HMS MediaEngine – Windows Portable Build (§30.2, ADR-0005: Nuitka Onefolder)
|
||||
# Läuft auf Windows mit Python 3.13 und Nuitka installiert.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
VERSION="0.1.0"
|
||||
OUT_DIR="build/windows/HMS-MediaEngine-Portable-$VERSION"
|
||||
|
||||
echo "=== HMS MediaEngine Windows Build v$VERSION ==="
|
||||
|
||||
# 1. Python-Abhängigkeiten installieren
|
||||
echo "[1/5] Installiere Python-Abhängigkeiten..."
|
||||
uv sync
|
||||
|
||||
# 2. Frontend bauen (statische Assets)
|
||||
echo "[2/5] Baue Web-Frontend..."
|
||||
cd apps/web
|
||||
corepack enable pnpm 2>/dev/null || true
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm build
|
||||
cd ../..
|
||||
|
||||
# 3. Rust-Renderkern bauen (nur wenn cargo verfügbar; sonst Überspringen)
|
||||
echo "[3/5] Baue Rust-Renderkern..."
|
||||
if command -v cargo >/dev/null 2>&1; then
|
||||
cd native/render_bridge
|
||||
cargo build --release
|
||||
cd ../..
|
||||
RENDERER_DLL="native/render_bridge/target/release/hms_render_bridge.dll"
|
||||
if [ -f "$RENDERER_DLL" ]; then
|
||||
echo " Render-Bridge DLL gefunden: $RENDERER_DLL"
|
||||
fi
|
||||
else
|
||||
echo " WARNUNG: cargo nicht gefunden; Rust-Renderkern wird nicht gebaut"
|
||||
echo " (Wird im Windows-Durchlauf nachgeholt, ADR-0004)"
|
||||
fi
|
||||
|
||||
# 4. Nuitka Onefolder-Build
|
||||
echo "[4/5] Baue portable Onefolder-Ausgabe (Nuitka)..."
|
||||
rm -rf "$OUT_DIR"
|
||||
mkdir -p "$OUT_DIR"
|
||||
|
||||
python -m nuitka \
|
||||
--standalone \
|
||||
--onefile=False \
|
||||
--output-dir="$OUT_DIR" \
|
||||
--include-package=hms_protocol \
|
||||
--include-package=hms_domain \
|
||||
--include-package=hms_parameter \
|
||||
--include-package=hms_artnet \
|
||||
--include-package=hms_cluster \
|
||||
--include-package=hms_persistence \
|
||||
--include-package=hms_plugin_sdk \
|
||||
--include-package=hms_media \
|
||||
--include-package=hms_audio \
|
||||
--include-package=hms_content_sync \
|
||||
--include-package=hms_capabilities \
|
||||
--include-package=hms_adaptive \
|
||||
--include-package=hms_renderer \
|
||||
--include-package=hms_control_server \
|
||||
--include-package=hms_launcher \
|
||||
--include-data-dir=apps/web/dist=web \
|
||||
--windows-console-mode=disable \
|
||||
--company-name="HMS" \
|
||||
--product-name="HMS MediaEngine" \
|
||||
--file-version="$VERSION" \
|
||||
--product-version="$VERSION" \
|
||||
apps/launcher/hms_launcher/__main__.py
|
||||
|
||||
# 5. GStreamer-Runtime und portable Struktur
|
||||
echo "[5/5] Kopiere GStreamer-Runtime und portable Struktur..."
|
||||
|
||||
# PORTABLE_MODE Markierung (§9)
|
||||
touch "$OUT_DIR/PORTABLE_MODE"
|
||||
|
||||
# GStreamer (MSVC 1.28.6, ADR-0002)
|
||||
# Erwartet: GStreamer-MSVC-Installationspfad oder GSTREAMER_1_0_ROOT_MSVC_X86_64
|
||||
if [ -n "${GSTREAMER_1_0_ROOT_MSVC_X86_64:-}" ]; then
|
||||
mkdir -p "$OUT_DIR/runtime/gstreamer"
|
||||
cp -r "$GSTREAMER_1_0_ROOT_MSVC_X86_64/bin" "$OUT_DIR/runtime/gstreamer/bin"
|
||||
cp -r "$GSTREAMER_1_0_ROOT_MSVC_X86_64/lib/gstreamer-1.0" "$OUT_DIR/runtime/gstreamer/lib/"
|
||||
echo " GStreamer 1.28.6 gebündelt (ADR-0002)"
|
||||
else
|
||||
echo " WARNUNG: GSTREAMER_1_0_ROOT_MSVC_X86_64 nicht gesetzt"
|
||||
echo " GStreamer wird nicht gebündelt; im Windows-Durchlauf ergänzen"
|
||||
fi
|
||||
|
||||
# Portable Verzeichnisstruktur (§9)
|
||||
mkdir -p "$OUT_DIR/plugins/builtin" "$OUT_DIR/plugins/user"
|
||||
mkdir -p "$OUT_DIR/projects" "$OUT_DIR/media" "$OUT_DIR/logs"
|
||||
mkdir -p "$OUT_DIR/userdata/database" "$OUT_DIR/userdata/cache" \
|
||||
"$OUT_DIR/userdata/identity" "$OUT_DIR/userdata/sync-staging" \
|
||||
"$OUT_DIR/userdata/thumbnails" "$OUT_DIR/userdata/plugin-cache"
|
||||
mkdir -p "$OUT_DIR/config" "$OUT_DIR/licenses"
|
||||
|
||||
# Plugin-Dateien kopieren
|
||||
cp -r plugins/builtin/generators "$OUT_DIR/plugins/builtin/"
|
||||
cp -r plugins/builtin/filters "$OUT_DIR/plugins/builtin/"
|
||||
|
||||
# Standardkonfiguration
|
||||
cat > "$OUT_DIR/config/app.toml" << 'EOF'
|
||||
[hms]
|
||||
bind_host = "127.0.0.1"
|
||||
default_port = 8000
|
||||
open_browser = true
|
||||
EOF
|
||||
|
||||
# SHA-256-Prüfsumme
|
||||
echo "Erzeuge SHA-256-Prüfsumme..."
|
||||
cd "build/windows"
|
||||
if command -v sha256sum >/dev/null 2>&1; then
|
||||
find "HMS-MediaEngine-Portable-$VERSION" -type f -exec sha256sum {} + > "HMS-MediaEngine-Portable-$VERSION.sha256"
|
||||
echo " Prüfsumme: HMS-MediaEngine-Portable-$VERSION.sha256"
|
||||
fi
|
||||
|
||||
# ZIP erstellen
|
||||
echo "Erstelle Release-ZIP..."
|
||||
if command -v zip >/dev/null 2>&1; then
|
||||
zip -r "HMS-MediaEngine-Portable-$VERSION.zip" "HMS-MediaEngine-Portable-$VERSION"
|
||||
echo " Release: build/windows/HMS-MediaEngine-Portable-$VERSION.zip"
|
||||
fi
|
||||
|
||||
echo "=== Build abgeschlossen ==="
|
||||
echo "Ausgabe: $OUT_DIR"
|
||||
echo ""
|
||||
echo "Hinweis: Dieser Build ist ein Dev-Build ohne GPU-Validierung (ADR-0008)."
|
||||
echo "Gate-0-Messungen (D3D11, Framezeiten, DMX-Latenz) laufen auf echter Hardware."
|
||||
Reference in New Issue
Block a user