Skip to content

build: Fallout 10.4 across the repo group, pinned exactly - #321

Merged
ChrisonSimtian merged 3 commits into
mainfrom
build/fallout-10.4
Aug 9, 2026
Merged

build: Fallout 10.4 across the repo group, pinned exactly#321
ChrisonSimtian merged 3 commits into
mainfrom
build/fallout-10.4

Conversation

@ChrisonSimtian

@ChrisonSimtian ChrisonSimtian commented Aug 9, 2026

Copy link
Copy Markdown
Collaborator

Moves every repository in the group onto Fallout 10.4.0, pinned exactly.

Repo Declared before Actually resolving Now
ErpForFactoryGames (this PR) 10.3.5 11.0.8 [10.4.0]
Satisfactory 10.3.5 11.0.8 [10.4.0] + Pack fix
CaptainOfIndustry no build system [10.4.0]
OutworldStation no build system [10.4.0]

The pin is the real fix

Version="10.3.5" in NuGet is a minimum, not a match. So this repo declared 10.3.5 while every build — local and CI — was quietly resolving Fallout.Common 11.0.8.

That's worse than ordinary drift: the entire 11.x line is unlisted on nuget.org. Restore still reaches unlisted versions when satisfying a minimum, so CI had been silently building on a withdrawn package for months. 10.4.0 is the latest listed release (published 2026-08-07), and the search index carries no 11.x at all.

An exact pin is what stops a bare minimum wandering into withdrawn territory.

Why the first attempt at this PR failed CI

Pinning to [10.4.0] made the build fail with exit 143, about 30 seconds after every test had already passed (41 passed, 5 skipped, "Test Run Successful"), with no Fallout summary table.

Running the identical dotnet test command directly, with Fallout out of the picture, exits cleanly. So the tests aren't what hangs.

The cause is process plumbing: Fallout waits for the child's output streams to reach EOF, and MSBuild's reusable worker nodes and build server outlive dotnet test while still holding the inherited stdout handle. EOF never arrives, Fallout waits out its grace period, kills the process, and surfaces 143.

MSBUILDDISABLENODEREUSE=1 and DOTNET_CLI_USE_MSBUILD_SERVER=0 on the test invocation stop those daemons outliving the command. build.sh already passes -nodeReuse:false for the same reason when building the build project; this extends it to the test run. The same guard is applied preventively in the other three repos.

One breaking change in 10.4

Solution.GetProject is gone. Only Satisfactory used it, in Pack, to list packable projects by name. That list duplicated the IsPackable flags and would have silently missed a third library, so it now packs the solution and lets each project decide — which is what every other target in that file already did.

The two new repos had no build system

CI called dotnet directly, so there was no way to run locally what CI ran. Both now have build/ with Clean → Restore → Compile → Test → Pack → Push, and CI calls ./build.sh.

While wiring Pack I hit something that would have bitten on first release: neither had Nerdbank.GitVersioning, so every pack emitted 1.0.0 and the second tagged release would have been silently skipped as a duplicate. Both now derive versions from version.json + git height (0.1.0), with fetch-depth: 0 in CI since git height needs full history.

Verified

  • This PR: CI green on 10.4.0 — Build & Test 2m55s, plus lint, migration drift and Postgres smoke.
  • Both new repos: Clean → Restore → Compile → Test → Pack green end to end on 10.4.0 — CoI 32/32 tests, Outworld Station 36/36, four packages plus symbols each.

Worth its own issue

The hang exposed something real underneath: this repo's test run leaves MSBuild daemons holding pipes well past "Test Run Successful". The guard stops it mattering, but it's tolerance rather than absence — locally I also saw a testhost reach 20 GB before exiting. Happy to raise an issue if you want it chased.

🤖 Generated with Claude Code

Bumps the build system from Fallout.Common 10.3.5 to 10.4.0, and pins it with
bracket notation.

The pin matters more than the bump. A bare "10.4.0" in NuGet is a *minimum*,
not an exact version, so restore is free to satisfy it with anything higher --
and it did: this repo was silently resolving Fallout.Common 11.0.8, a major
version nobody chose, while the csproj claimed 10.3.5. [10.4.0] turns a missing
package into an error instead of an unannounced upgrade, which is the whole
point of pinning a build system.

Side effect worth noting: the build now restores with zero warnings, down from
twelve. The drifted 11.0.8 dependency tree was pulling
System.Security.Cryptography.Xml 10.0.6, which carries five high-severity
advisories; 10.4.0 does not.

Verified: restores 10.4.0, compiles clean, and the target graph runs --
Fallout Execution Engine 10.4.0.15.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

Test results

228 tests   223 ✅  2m 4s ⏱️
 12 suites    5 💤
 12 files      0 ❌

Results for commit 9c0405c.

♻️ This comment has been updated with latest results.

Reverses the version half of the previous commit. The pin stays; the number
was wrong, and CI proved it.

What actually happened: this file said "10.3.5", but a bare version in NuGet is
a *minimum*, not a match — so every build here has quietly been resolving
Fallout.Common 11.0.8. "Bumping" to 10.4.0 was therefore a downgrade from what
CI was really running, which is why a version bump could break a green build.

10.4.0 hangs the Test target. It waits on the test process, which does not exit
promptly in this repo, then kills it: the build fails with exit 143 roughly 30
seconds after every test has already passed (41 passed, 5 skipped). Reproduced
locally as well as on CI, where it also leaves testhost processes alive for
minutes -- one reached 20 GB before exiting.

11.0.18 is not the answer either: it moved Fallout.Common.ProjectModel, so
Build.cs no longer compiles. That is worth doing deliberately, not as a
side effect of a version bump.

So: [11.0.8], which is what CI has in fact been green on for months, now
recorded explicitly instead of arrived at by accident. The other three repos in
the group are pinned to the same version.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ChrisonSimtian ChrisonSimtian changed the title build: Fallout 10.4 across the whole repo group build: pin Fallout explicitly across the repo group Aug 9, 2026
Reverts the wrong turn in the previous commit. I moved the group to 11.0.8
because CI had been green on it -- without checking that the entire 11.x line
is UNLISTED on nuget.org. Restore still reaches unlisted versions when
satisfying a minimum, so "green on 11.0.8" meant CI had been silently building
on a withdrawn package. That is the bug, not the baseline. 10.4.0 is the latest
listed release (2026-08-07); the search index carries no 11.x at all.

So: [10.4.0], which was the ask all along, and the exact pin is what stops a
bare minimum from wandering into withdrawn territory again.

That leaves the actual problem the first attempt ran into -- 10.4.0 failing the
Test target with exit 143 about thirty seconds after every test had passed.

Running the same `dotnet test` command directly, with Fallout out of the
picture, exits fine. So the tests are not what hangs. Fallout waits for the
child's output streams to reach EOF, and MSBuild's reusable worker nodes and
build server outlive `dotnet test` while still holding the inherited stdout
handle. EOF never arrives, Fallout waits out its grace period, kills the
process, and surfaces 143.

MSBUILDDISABLENODEREUSE=1 and DOTNET_CLI_USE_MSBUILD_SERVER=0 stop those
daemons outliving the command, so the pipes close and the process is reaped.
build.sh already passes -nodeReuse:false for the same reason when building the
build project itself; this extends it to the test run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ChrisonSimtian ChrisonSimtian changed the title build: pin Fallout explicitly across the repo group build: Fallout 10.4 across the repo group, pinned exactly Aug 9, 2026
@ChrisonSimtian
ChrisonSimtian merged commit 7035b79 into main Aug 9, 2026
12 checks passed
@ChrisonSimtian
ChrisonSimtian deleted the build/fallout-10.4 branch August 9, 2026 09:31
@ChrisonSimtian

Copy link
Copy Markdown
Collaborator Author

Raised #322 for the underlying orphaned-process behaviour. The guard in this PR keeps CI green, but it stops the daemons mattering rather than stopping them being left behind — worth separating so the workaround doesn't get mistaken for the fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant