From 3b078240a84d55c88f16ee425e1489003235c678 Mon Sep 17 00:00:00 2001 From: Liam Diprose Date: Tue, 14 Jul 2026 22:50:09 +1200 Subject: [PATCH] Serve the daemon web UI from Nix packages (#1978) * fix(nix): include daemon-web-ui in nix package * fix(nix): verify web UI without packaging website sources * test(nix): cover bundled web UI inputs --------- Co-authored-by: Mohamed Boudra --- .github/workflows/nix.yml | 7 ++++++- nix/package.nix | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 36348c301..4bf1ae807 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -9,12 +9,15 @@ on: - "flake.lock" - "package.json" - "package-lock.json" + - "packages/app/**" + - "packages/expo-two-way-audio/**" - "packages/highlight/**" - "packages/protocol/**" - "packages/client/**" - "packages/server/**" - "packages/relay/**" - "packages/cli/**" + - "scripts/build-daemon-web-ui.mjs" - "scripts/update-nix.sh" - "scripts/fix-lockfile.mjs" - ".github/workflows/nix.yml" @@ -64,7 +67,7 @@ jobs: } trap cleanup EXIT - ./result/bin/paseo-server --no-relay >"$WRAPPER_LOG" 2>&1 & + PASEO_WEB_UI_ENABLED=true ./result/bin/paseo-server --no-relay >"$WRAPPER_LOG" 2>&1 & DAEMON_PID=$! deadline=$((SECONDS + 30)) @@ -72,6 +75,8 @@ jobs: if STATUS_JSON="$(./result/bin/paseo daemon status --json)" \ && jq -e '.connectedDaemon == "reachable"' <<<"$STATUS_JSON" >/dev/null; then echo "$STATUS_JSON" + curl --fail --silent --show-error http://127.0.0.1:6767/ >"$PASEO_HOME/web-ui.html" + [[ -s "$PASEO_HOME/web-ui.html" ]] exit 0 fi diff --git a/nix/package.nix b/nix/package.nix index b904333f5..839a4c7d5 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -30,9 +30,7 @@ buildNpmPackage rec { relPath = lib.removePrefix (toString ./..) path; in # Exclude non-daemon workspace contents (keep package.json for workspace resolution) - !(lib.hasPrefix "/packages/app/src" relPath) - && !(lib.hasPrefix "/packages/app/assets" relPath) - && !(lib.hasPrefix "/packages/app/android" relPath) + !(lib.hasPrefix "/packages/app/android" relPath) && !(lib.hasPrefix "/packages/app/ios" relPath) && !(lib.hasPrefix "/packages/website/src" relPath) && !(lib.hasPrefix "/packages/website/public" relPath) @@ -81,6 +79,7 @@ buildNpmPackage rec { # Build all server packages in dependency order (defined in package.json) npm run build:server + npm run build:daemon-web-ui runHook postBuild ''; @@ -107,6 +106,9 @@ buildNpmPackage rec { # CLI/server bin starts from $out. cp package.json $out/lib/paseo/ + # Web UI Assets + cp -r packages/server/dist/server/web-ui $out/lib/paseo/packages/server/dist/server/ + # Create wrapper for the server entry point (for systemd / direct use) mkdir -p $out/bin makeWrapper ${nodejs}/bin/node $out/bin/paseo-server \