#!/usr/bin/env bash # Build the Microsoft Store MSIX package (TASK 48 item 2). # # scripts/package-msix.sh # # Publishes the app self-contained for win-x64 (so the package carries its own .NET # runtime and the ONLY native folders are win-x64 — a RID-less publish copies every # ONNX Runtime native folder), stages the manifest + logos from Packaging/, and packs # with the Windows SDK's makeappx. # # The result is UNSIGNED (the Store signs the submitted package). To produce a package # you can install locally for testing, point MSIX_PFX at a self-signed .pfx: # # MSIX_PFX=/path/to/dev.pfx MSIX_PFX_PASSWORD=... scripts/package-msix.sh # # ⚠️ Before a real submission: set Identity/@Publisher and Properties/P # PublisherDisplayName in Packaging/Package.appxmanifest to the exact values Partner # Center shows, and bump Identity/@Version. A mismatch is a certification rejection. set -euo pipefail REPO_WSL="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" REPO_WIN="$(wslpath -w "$REPO_WSL")" DOTNET="/mnt/c/Program Files/dotnet/dotnet.exe" STAGE_WSL="$REPO_WSL/artifacts/msix-stage" OUT_WSL="$REPO_WSL/artifacts/LlamaCasty.msix" MAKEAPPX="$(ls -d "/mnt/c/Program Files (x86)/Windows Kits/10/bin/"*/x64/makeappx.exe 2>/dev/null \ | sort -V | tail -1 || true)" SIGNTOOL="$(ls -d "/mnt/c/Program Files (x86)/Windows Kits/10/bin/"*/x64/signtool.exe 2>/dev/null \ | sort -V | tail -1 || true)" [ -x "$MAKEAPPX" ] || { echo "makeappx.exe not found — install the Windows 10/11 SDK." >&2; exit 1; } echo "== publish (Release, win-x64, self-contained) ==" rm -rf "$STAGE_WSL" mkdir -p "$STAGE_WSL" "$DOTNET" publish "$REPO_WIN\\ytLive.csproj" \ -c Release -r win-x64 --self-contained true \ --nologo -v minimal \ -o "$(wslpath -w "$STAGE_WSL")" [ -f "$STAGE_WSL/LlamaCasty.exe" ] || { echo "publish produced no LlamaCasty.exe" >&2; exit 1; } [ -d "$STAGE_WSL/ffmpeg" ] || { echo "ffmpeg/ is missing from the package — it must ship bundled (Store policy 10.2.2)." >&2 exit 1 } echo "== stage the manifest + logos ==" cp "$REPO_WSL/Packaging/Package.appxmanifest" "$STAGE_WSL/AppxManifest.xml" cp -r "$REPO_WSL/Packaging/Assets" "$STAGE_WSL/Assets" echo "== pack ==" "$MAKEAPPX" pack /d "$(wslpath -w "$STAGE_WSL")" /p "$(wslpath -w "$OUT_WSL")" /o if [ -n "${MSIX_PFX:-}" ]; then [ -x "$SIGNTOOL" ] || { echo "signtool.exe not found — install the Windows 10/11 SDK." >&2; exit 1; } echo "== sign ==" if [ -n "${MSIX_PFX_PASSWORD:-}" ]; then "$SIGNTOOL" sign /fd SHA256 /a /f "$(wslpath -w "$MSIX_PFX")" /p "$MSIX_PFX_PASSWORD" \ "$(wslpath -w "$OUT_WSL")" else "$SIGNTOOL" sign /fd SHA256 /a /f "$(wslpath -w "$MSIX_PFX")" "$(wslpath -w "$OUT_WSL")" fi else echo "note: unsigned package (the Store signs submissions); set MSIX_PFX to sign locally." fi echo echo "MSIX: $OUT_WSL ($(du -h "$OUT_WSL" | cut -f1))"