Files
punktfunk/scripts/windows
enricobuehler e7a8cf2bba
ci / web (push) Successful in 58s
apple / swift (push) Successful in 1m24s
ci / docs-site (push) Successful in 59s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 17s
decky / build-publish (push) Successful in 25s
windows-host / package (push) Successful in 19m46s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 17s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 17s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 18s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 17s
android / android (push) Successful in 16m12s
arch / build-publish (push) Successful in 12m14s
ci / bench (push) Successful in 5m27s
apple / screenshots (push) Successful in 6m32s
ci / rust (push) Successful in 19m26s
deb / build-publish (push) Successful in 12m58s
docker / deploy-docs (push) Successful in 24s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 24m51s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 24m51s
feat(packaging): nix web console + plugin/script runner everywhere; fix tray zbus/tokio crash
Ship the management web console and the plugin/script runner across the packaging
matrix, and fix a Linux tray startup crash.

- nix: add punktfunk-web (Nitro SSR on bun) and punktfunk-scripting (Effect runner),
  with services.punktfunk.{web,scripting} modules. Both bun node_modules come from
  fixed-output derivations pinned to real deps hashes; patchShebangs the web
  node_modules so orval/paraglide/vite run in the sandbox. Validated on x86_64-linux
  (nix build .#punktfunk-{web,scripting,tray,host} all green).

- punktfunk-scripting now ships for deb/rpm/arch/nix/windows, mirroring the web-console
  mechanics (vendored bun on deb/rpm/arch, pkgs.bun on nix; one self-contained
  `bun build --target=bun` bundle). Opt-in: host Recommends it, but the systemd --user
  unit ships un-started (Windows registers its scheduled task disabled).

- fix(tray): build punktfunk-tray in its OWN cargo invocation on nix/rpm/arch. Cargo
  unifies features across one `cargo build`, so co-building the tray with the host pulls
  the host's ashpd->zbus/tokio onto the tray's shared zbus and it panics at startup
  ("there is no reactor running, must be called from the context of a Tokio 1.x
  runtime"). Isolated, the tray's zbus stays on async-io. The .deb already did this;
  runtime-verified on nix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 21:16:34 +02:00
..

Windows host build/deploy scripts

Helper scripts for the Windows host box (the RTX .173 lab box, repo at C:\Users\Public\punktfunk-native). Run them from the repo root in an elevated PowerShell.

One-time: persist the build environment

powershell -ExecutionPolicy Bypass -File scripts\windows\setup-build-env.ps1

Persists (Machine scope) the vars the host build needs (NVENC itself needs none — its entry points are runtime-loaded from the driver's nvEncodeAPI64.dll):

var value why
LIBCLANG_PATH C:\Program Files\LLVM\bin bindgen (libclang.dll)
CMAKE_POLICY_VERSION_MINIMUM 3.5 audiopus_sys / cmake crates

FFMPEG_DIR is not set — the --features nvenc build the RTX box uses does not link libavcodec (that is only the amf-qsv feature). The VS C++ toolchain is loaded per-build via vcvars64.bat (auto-discovered with vswhere).

Rebuild + redeploy the host service

powershell -ExecutionPolicy Bypass -File scripts\windows\deploy-host.ps1

Stops PunktfunkHost, backs up the current binary (punktfunk-host.exe.bak), builds --release -p punktfunk-host --features nvenc from the current source, then restarts the service on the new binary — with automatic rollback if the build fails or the new binary won't start. The service is down only for the build duration.

Web management console

On an installed host (the setup.exe) the console is set up automatically — no manual steps. The installer bundles the built (self-contained, no-node_modules) .output server + a portable bun and runs punktfunk-host.exe web setup, which registers the PunktfunkWeb scheduled task (at boot, as SYSTEM, restart-on-failure) running {app}\web\web-run.cmdbun …\.output\server\index.mjs on :47992, opens inbound TCP 47992, and writes the login password to %ProgramData%\punktfunk\web-password (ACL'd to Administrators + SYSTEM). The mgmt bearer token it proxies with is the host's own %ProgramData%\punktfunk\mgmt-token. Browse https://<host-ip>:47992 and log in with the password the installer shows on its final page. To change it, edit web-password and re-run the task: schtasks /run /tn PunktfunkWeb.

Rebuild + restart the console (dev box)

powershell -ExecutionPolicy Bypass -File scripts\windows\build-web.ps1

bun install && bun run build (Nitro noExternals -> a self-contained .output, no node_modules/.npmrc), then restarts the PunktfunkWeb task and checks :47992/login. Use this to iterate on the console against an installed host - punktfunk-host.exe web setup (or a fresh install) is what creates the task in the first place.

Rebuild + redeploy everything

powershell -ExecutionPolicy Bypass -File scripts\windows\deploy-all.ps1

Thin wrapper: runs deploy-host.ps1 then build-web.ps1 in sequence. If the host build/start fails, deploy-host.ps1 rolls itself back and throws, which stops this script before the web console step runs.

Typical flow after pulling new code

git pull
powershell -ExecutionPolicy Bypass -File scripts\windows\deploy-all.ps1