Files
hms-mediaengine/build/windows/build_portable.sh
T
HMS MediaEngine Agent 739a81bcf1 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
2026-09-11 08:41:44 +02:00

129 lines
4.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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."