feat(windows-installer): move driver + web install into the host exe (ASCII root fix)
apple / swift (push) Successful in 1m0s
apple / screenshots (push) Successful in 5m16s
windows-host / package (push) Successful in 6m25s
ci / rust (push) Failing after 28s
ci / web (push) Successful in 53s
ci / docs-site (push) Successful in 1m1s
android / android (push) Successful in 3m21s
deb / build-publish (push) Successful in 2m31s
decky / build-publish (push) Successful in 11s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 6s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 4s
ci / bench (push) Successful in 4m39s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 9m2s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 8m50s
docker / deploy-docs (push) Successful in 17s
apple / swift (push) Successful in 1m0s
apple / screenshots (push) Successful in 5m16s
windows-host / package (push) Successful in 6m25s
ci / rust (push) Failing after 28s
ci / web (push) Successful in 53s
ci / docs-site (push) Successful in 1m1s
android / android (push) Successful in 3m21s
deb / build-publish (push) Successful in 2m31s
decky / build-publish (push) Successful in 11s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 6s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 4s
ci / bench (push) Successful in 4m39s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 9m2s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 8m50s
docker / deploy-docs (push) Successful in 17s
Port the three install-time PowerShell *files* (install-pf-vdisplay.ps1, install-gamepad-drivers.ps1, web-setup.ps1) into punktfunk-host.exe subcommands: `driver install [--gamepad] --dir <stage>` and `web setup --app-dir <app> [--password-file <f>]` (windows/install.rs). Why: PowerShell 5.1 reads a BOM-less .ps1 FILE in the machine ANSI codepage, so a stray non-ASCII byte mis-decodes and aborts on a non-English box - exactly how the pf-vdisplay driver install silently failed. A compiled subcommand drives the same external tools (certutil/pnputil/nefconc/schtasks/netsh/icacls) as fixed string literals, with no file-codepage surface. (The .iss's INLINE -Command PowerShell is a command-line string, not a file read, so it's unaffected and stays.) - windows/install.rs: faithful port - cert trust, gated nefconc node create + pnputil for pf-vdisplay; pnputil per-inf for gamepads; web-password ACL, the PunktfunkWeb task (generated UTF-16 XML), firewall rule, start. Best-effort (a hiccup warns, never aborts). - punktfunk-host.iss [Run]: call the exe instead of `powershell -File`; drop the web-setup.ps1 staging + WebSetup define; WebSetupParams emits --app-dir/--password-file. - pack-host-installer.ps1: stop copying the three install scripts into the stages. - delete the three .ps1 files. The `mod install;` + dispatch arms in main.rs landed in the preceding docs commit (swept up by a concurrent commit); this commit adds the module + installer wiring. CI-compile-validated via windows-host; the install path is on-glass-validated on the next canary install (the test box is offline). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -152,7 +152,7 @@ if (-not $NoDriver) {
|
||||
& (Join-Path $here 'build-pf-vdisplay.ps1') -Out $built
|
||||
$stage = Join-Path $OutDir 'stage'
|
||||
& (Join-Path $here 'stage-pf-vdisplay.ps1') -OutDir $stage -VendorDir $built
|
||||
Copy-Item (Join-Path $here 'install-pf-vdisplay.ps1') (Join-Path $stage 'install-pf-vdisplay.ps1') -Force
|
||||
# The installer runs `punktfunk-host.exe driver install --dir {tmp}\pfvdisplay` (not a staged .ps1).
|
||||
$defines += "/DStageDir=$stage"
|
||||
}
|
||||
else { Write-Host "-NoDriver: building installer WITHOUT the bundled pf-vdisplay driver" }
|
||||
@@ -160,8 +160,9 @@ else { Write-Host "-NoDriver: building installer WITHOUT the bundled pf-vdisplay
|
||||
# --- build (from source) + stage the punktfunk virtual-gamepad UMDF drivers --------------------
|
||||
# pf-dualsense (DualSense / DualShock 4) + pf-xusb (Xbox 360 / XInput) are members of the same drivers
|
||||
# workspace as pf-vdisplay, built from source per release (build-gamepad-drivers.ps1) - same anti-stale
|
||||
# reasoning as pf-vdisplay; the prior checked-in binaries under gamepad-drivers/ are retired. install-
|
||||
# gamepad-drivers.ps1 adds each to the store (the host SwDeviceCreate's the per-session devnodes).
|
||||
# reasoning as pf-vdisplay; the prior checked-in binaries under gamepad-drivers/ are retired. The
|
||||
# installer adds each to the store via `punktfunk-host.exe driver install --gamepad` (the host
|
||||
# SwDeviceCreate's the per-session devnodes).
|
||||
if (-not $NoDriver) {
|
||||
$gpBuilt = Join-Path $OutDir 'gamepad-built'
|
||||
# -SkipBuild: build-pf-vdisplay.ps1 above already `cargo build`s the WHOLE drivers workspace (incl.
|
||||
@@ -171,7 +172,6 @@ if (-not $NoDriver) {
|
||||
if (Test-Path $gpStage) { Remove-Item -Recurse -Force $gpStage }
|
||||
New-Item -ItemType Directory -Force -Path $gpStage | Out-Null
|
||||
Copy-Item (Join-Path $gpBuilt '*') $gpStage -Force
|
||||
Copy-Item (Join-Path $here 'install-gamepad-drivers.ps1') (Join-Path $gpStage 'install-gamepad-drivers.ps1') -Force
|
||||
$defines += "/DGamepadStageDir=$gpStage"
|
||||
Write-Host "==> built + staged gamepad UMDF drivers -> $gpStage"
|
||||
}
|
||||
@@ -208,13 +208,11 @@ if ($WebDir -and (Test-Path $WebDir) -and $BunExe -and (Test-Path $BunExe)) {
|
||||
$bunStage = Join-Path $OutDir 'bun.exe'
|
||||
Copy-Item -LiteralPath $BunExe -Destination $bunStage -Force
|
||||
$webRun = Join-Path $OutDir 'web-run.cmd'
|
||||
$webSetup = Join-Path $OutDir 'web-setup.ps1'
|
||||
Copy-Item (Join-Path $repoRoot 'scripts\windows\web-run.cmd') -Destination $webRun -Force
|
||||
Copy-Item (Join-Path $repoRoot 'scripts\windows\web-setup.ps1') -Destination $webSetup -Force
|
||||
# The console is provisioned by `punktfunk-host.exe web setup` (not a staged web-setup.ps1).
|
||||
$defines += "/DWebDir=$webStage"
|
||||
$defines += "/DBunExe=$bunStage"
|
||||
$defines += "/DWebRunCmd=$webRun"
|
||||
$defines += "/DWebSetup=$webSetup"
|
||||
Write-Host "bundling the web console from $WebDir (+ bun $BunExe)"
|
||||
}
|
||||
else { Write-Host "no -WebDir/-BunExe -> installer built WITHOUT the web console" }
|
||||
|
||||
Reference in New Issue
Block a user