Files
TeslaSuite/vPOD/pack.ps1
T
CydandClaude Fable 5 91640dcbf2 XP11: whole suite on net40 — Console + vPOD run on XP SP3 through Win11
The Launcher's XP11 port (8730b9b) now extends to everything: one net40
flavor across Console, vPOD, Contract, and SecureConfig (Newtonsoft.Json
everywhere; the net48/System.Text.Json legs and their #if splits are gone
since nothing consumed them).

Console (net40, single TFM like the Launcher):
- The ~31 BinaryFormatter bitmap blobs in the .resx files became raw
  embedded files under assets/icons/ (extracted byte-faithfully via a
  serialization surrogate — the animated square_throbber.gif survives),
  loaded by Properties.Resources.EmbeddedBitmap/EmbeddedIcon. Reason:
  System.Resources.Extensions' DeserializingResourceReader is net461+
  and cannot load on net40. Strings stay in the .resx.
- IReadOnlyList -> IList in AppRegistry (net45+ interface).

vPOD (net40, single TFM):
- Zip extraction now shares the Launcher's MiniZip.cs (linked source), so
  the diff-test install round-trip exercises it against ZipArchive zips.
- RPC args as JTokens; LaunchApps.json persistence via Newtonsoft;
  Thread.VolatileRead instead of Volatile.Read.

Contract/SecureConfig: net40-only; Client/** (PodManagerConnection) now
ships in the one build. The Launcher package gains
TeslaSecureConfiguration.dll as a dependency of the client half.

Tests: the net48 xunit host loads the net40 assemblies (both CLR4), so
the suite exercises exactly what ships — 106/106 green. Also verified
live: net40 console provisioned, managed, and ran a full RP mission
against net40 vPOD (beacon/passphrase/RSA, 53290 RPC, egg load,
Run/Stop Mission).

Version: 4.11.4.3 across Launcher, Console, and vPOD (vPOD joins the
suite version line; was 1.0.0). Ship the dotNetFx40 redistributable in
Launcher/assets for XP-era pods.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:01:34 -05:00

41 lines
1.6 KiB
PowerShell

# Builds the vPOD install package for the console's Manage Site -> Install Product.
#
# The launcher extracts the zip's entries directly into C:\Games\, so the archive
# root must contain a `vPOD\` folder holding vPOD.exe + its dependencies. The
# console's Apps.xml vPOD product then launches C:\Games\vPOD\vPOD.exe.
#
# Usage: pwsh -File pack.ps1 (Release, default)
# pwsh -File pack.ps1 -Config Debug
param([string]$Config = 'Release')
$ErrorActionPreference = 'Stop'
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
# net40 leg: the XP11 build that runs on XP SP3 pods through Windows 11.
$bin = Join-Path $root "bin\$Config\net40"
$distDir = Join-Path $root 'dist'
$stage = Join-Path $distDir 'vPOD' # -> C:\Games\vPOD on the pod
$zipPath = Join-Path $distDir 'vPOD.zip'
Write-Host "Building vPOD ($Config)..."
dotnet build (Join-Path $root 'vPOD.csproj') -c $Config --nologo -v minimal | Out-Null
if (-not (Test-Path (Join-Path $bin 'vPOD.exe'))) {
throw "Build output not found: $bin\vPOD.exe"
}
# Fresh stage dir.
if (Test-Path $stage) { Remove-Item $stage -Recurse -Force }
New-Item -ItemType Directory -Force $stage | Out-Null
# The runtime payload: the exe + the vendored Munga Net.dll (copied local by the
# csproj) + config. No pdb/xml.
Get-ChildItem $bin -File |
Where-Object { $_.Extension -in '.exe', '.dll', '.config' } |
ForEach-Object { Copy-Item $_.FullName $stage }
if (Test-Path $zipPath) { Remove-Item $zipPath -Force }
Compress-Archive -Path $stage -DestinationPath $zipPath -Force
Write-Host "Packaged: $zipPath"
Get-ChildItem $stage | Select-Object Name, Length | Format-Table -AutoSize