Every push to main now runs the gate on the self-hosted runners and, when
green, publishes a Gitea Release carrying the client, launcher+bake, and
manifest.
Pipeline (.gitea/workflows/ci.yml):
- windows-gate runs tools/run-release-gate.ps1, the project's own bounded
gate. A bare `dotnet test AcDream.slnx` is NOT usable as a gate: it fails
~36 tests by design, because the InstalledDat/Live/Manual/OS lanes assert
their own preconditions. The gate script's trait filter is what excludes
them.
- linux-portable runs the portable closure, where the Linux-lane tests
actually execute instead of failing on Windows.
- release depends on both, so a red gate cannot publish. It is a job in the
same workflow rather than a workflow_run trigger, whose Forgejo support is
unreliable; `needs` is guaranteed.
No actions/setup-dotnet: data.forgejo.org does not mirror it at all (404),
and both runners carry the pinned SDK band already. actions/checkout IS
mirrored and is used normally.
Release payloads become release ATTACHMENTS, outside git history, so ~120 MB
per build never enters a branch. Only the ~500-byte manifest.json is
committed, to the payload-free dist branch, because Forgejo has no
/releases/latest/download/ route (verified 404) for the launcher to poll.
publish-bin.ps1 takes -BaseUrl so the manifest points at the release tag.
Two real gate failures fixed:
- LauncherProjectBoundaryTests asserted four `**` path filters belonging to
the push triggers that
|
||
|---|---|---|
| .. | ||
| A8CellAudit | ||
| cdb | ||
| cdb-scripts | ||
| diag-logs | ||
| dump-keymap | ||
| ghidra_project | ||
| InspectCoatTex | ||
| jsonl | ||
| pdb-extract | ||
| PesChainAudit | ||
| ProjectileVfxAudit | ||
| RainMeshProbe | ||
| RetailTimeProbe | ||
| SetupInspect | ||
| ShaderCompiler | ||
| SkyObjectInspect | ||
| StarsProbe | ||
| TextureDump | ||
| WeatherEnumerator | ||
| WeatherSetupProbe | ||
| analyze_265_steep_slope_capture.py | ||
| analyze_269_slope_stop_capture.py | ||
| analyze_resolve_capture.py | ||
| audit-test-inventory.ps1 | ||
| CampaignLaProcessCorrelation.ps1 | ||
| capture-campaign-la-session-process.ps1 | ||
| compile-shaders.ps1 | ||
| connected-dense-town.route.txt | ||
| connected-r6-soak.route.txt | ||
| connected-world-lifecycle.route.txt | ||
| connected-world-reconnect.route.txt | ||
| decompile_acclient.py | ||
| decompile_full.py | ||
| DecompileTargets.java | ||
| ghidra_decompile.py | ||
| new-campaign-la-update-fixture.ps1 | ||
| publish-bin.ps1 | ||
| publish-dist.ps1 | ||
| README.md | ||
| run-blank-world-ab-probe.ps1 | ||
| run-blank-world-surface-probe.ps1 | ||
| run-campaign-la-preflight.ps1 | ||
| run-connected-loss-gate.ps1 | ||
| run-connected-r6-soak.ps1 | ||
| run-connected-world-lifecycle-gate.ps1 | ||
| run-offline-pixel-gate.ps1 | ||
| run-offline-vulkan-capture.ps1 | ||
| run-portal-churn-soak.ps1 | ||
| run-release-gate.ps1 | ||
| run-repeat-connected-gate.ps1 | ||
| test-campaign-la-gate-helpers.ps1 | ||
| test-campaign-la-script-safety.ps1 | ||
| test-campaign-la-session-status.ps1 | ||
| update-package-locks.ps1 | ||
| verify_un2_fmul.py | ||
Maintained .NET tools
Every .csproj under tools/ is part of AcDream.slnx. The complete Release
gate restores and builds these tools, so a missing personal checkout or an API
change cannot leave a tracked tool silently broken. They are diagnostic/manual
programs: the gate builds them but does not run data-dependent investigations.
| Tool | Purpose | Runtime prerequisite |
|---|---|---|
A8CellAudit |
Inspect landblock, EnvCell, portal, and collision topology. | Installed AC DAT files / the arguments documented by the program. |
dump-keymap |
Extract the retail master input maps and decoded actions. | Installed client_portal.dat. |
PesChainAudit |
Walk weather PES call chains and particle emitters. | Installed AC DAT files. |
ProjectileVfxAudit |
Audit projectile physics-script and particle-emitter VFX mappings. | Installed AC DAT files. |
RainMeshProbe |
Inspect rain surfaces, polygon sidedness, and generated mesh counts. | Installed AC DAT files. |
RetailTimeProbe |
Read retail time-of-day and sky state for comparison. | Windows, a running retail client, and process-read access. |
SetupInspect |
Dump Setup parts, placement poses, and animation frames. | Installed AC DAT files and a Setup ID. |
ShaderCompiler |
Compile the Vulkan GLSL shader set to committed SPIR-V. | Source and output directory arguments. |
SkyObjectInspect |
Inspect Dereth sky/day-group objects and texture data. | Installed AC DAT files. |
StarsProbe |
Audit sky-object geometry, UV ranges, and surfaces. | Installed AC DAT files. |
TextureDump |
Dump render-surface statistics and texture images. | Installed AC DAT files. |
WeatherEnumerator |
Enumerate weather sky objects and their bounds. | Installed AC DAT files. |
WeatherSetupProbe |
Inspect the parts and surfaces of weather Setups. | Installed AC DAT files. |
Build the complete maintained graph with:
dotnet restore AcDream.slnx --locked-mode --force-evaluate
dotnet build AcDream.slnx -c Release --no-restore
Use pwsh ./tools/run-release-gate.ps1 for the authoritative bounded gate.
Package versions and lock-file maintenance are documented in
docs/release-gate.md.