Skip to content

Migrate build orchestration from NUKE to Fallout 10.4.0 - #344

Merged
lahma merged 4 commits into
mainfrom
fallout
Aug 8, 2026
Merged

Migrate build orchestration from NUKE to Fallout 10.4.0#344
lahma merged 4 commits into
mainfrom
fallout

Conversation

@lahma

@lahma lahma commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

Why

NUKE is unmaintained; Fallout is its maintained hard-fork successor. This migrates the build orchestration to Fallout 10.4.0 (release notes) and adopts its canonical tool-manifest model.

Note on versions: 10.4.0 is the latest official release. The 11.0.x packages on nuget.org are an abandoned line and fully unlisted, so Dependabot will never propose them — no ignore rule needed.

What changed

  • fallout-migrate 10.4.0 rewrite: Nuke.*Fallout.* namespaces, NukeBuildFalloutBuild, .nuke/.fallout/, <Nuke*> MSBuild properties; Nuke.Common 10.0.0 → Fallout.Common 10.4.0 in Directory.Packages.props
  • Bootstrap scripts replaced with the canonical Fallout thin shims: provision SDK if missing, then dotnet tool restore + dotnet fallout <args>. New .config/dotnet-tools.json pins fallout.globaltool 10.4.0 (the CLI; command fallout). The NUKE_ENTERPRISE_TOKEN feedz block is gone
  • Build project moved build-support/nuke-build/build-support/build/, wired via BuildProjectFile in .fallout/parameters.json. Root build/ (Fallout's convention) is not usable here: it's the compiled-output dir that Clean recreates and PackBinaries globs. .gitignore gets a !/build-support/build/ negation because the unanchored [Bb]uild/ rule would silently ignore new files there
  • TagVersion made null-safe (GitRepository?.Tags…); dropped EnableUnsafeBinaryFormatterSerialization; AGENTS.md build references updated
  • log4net 3.1.0 → 3.3.2 (separate commit, not migration-related): GHSA-4f7c-pmjv-c25w (published 2026-04) fails every solution restore with NU1902 under warnings-as-errors; the last green CI run predates the advisory, so the first PR to trigger CI would hit this regardless. Test-only dependency

CI impact

None by design. All three workflows are hand-written and call ./build.cmd / ./build.sh; the shims keep the exact interface — positional targets and env-var parameter binding (NuGetApiKey in publish.yml) behave identically.

Verification

Ran locally end to end: build project compiles clean; shim → dotnet tool restorefallout CLI → build-project resolution; Restore, CompileSolution, PackBinaries, Test, Pack all exercised (packages produced with correct 3.1.0-dev-* versioning); parameter binding verified in both switch form (-Configuration Release) and env-var form.

Two local-only failures were root-caused as machine artifacts, not migration fallout (both reproduce without Fallout involved):

  • CompileExamples: SDK 10.0.302 requires MSBuild ≥ 18; machine only has VS2022 (17.14). windows-latest runs the VS2026 image — fine on CI
  • DateTimeFormatterTests.FormatUsingDefaults: Windows user regional override (yyyy-MM-dd for en-US) which new CultureInfo("en-US") honors; passes on pristine runners

Publish was not run (it pushes packages); its code path changed by namespace only, and the env→parameter mechanism it depends on was exercised above.

Maintenance note

Keep .config/dotnet-tools.json (fallout.globaltool) in lockstep with Fallout.Common in Directory.Packages.props — Dependabot bumps the props file but not tool manifests.

🤖 Generated with Claude Code

lahma and others added 4 commits August 8, 2026 15:38
NUKE is unmaintained; Fallout (fallout.build) is its maintained hard-fork
successor. Applied fallout-migrate 10.4.0 plus the pieces it doesn't cover:

- Nuke.Common 10.0.0 -> Fallout.Common 10.4.0 (Directory.Packages.props)
- .nuke/ -> .fallout/, Nuke.* -> Fallout.* namespaces, NukeBuild -> FalloutBuild
- Replace bootstrap scripts with the canonical Fallout thin shims:
  dotnet tool restore + dotnet fallout (tool-manifest model); new
  .config/dotnet-tools.json pins fallout.globaltool 10.4.0 - keep it in
  lockstep with Fallout.Common in Directory.Packages.props (Dependabot
  bumps the props file but not tool manifests)
- Drop NUKE_ENTERPRISE_TOKEN block and EnableUnsafeBinaryFormatterSerialization
- Null-safe GitRepository access in TagVersion (CI clones have no tag context
  in worktrees; correct regardless)
- Update AGENTS.md build-orchestration references

Hand-written workflows need no changes: the shims keep the exact
./build.cmd <target> interface and env-var parameter binding.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Marko Lahma <marko.lahma@gmail.com>
Fallout's convention is a root build/ directory, but that name is taken
here: Build.cs uses root build/ as the compiled-output directory (Clean
recreates it, PackBinaries globs it), and .gitignore's [Bb]uild/ rule
covers it. Point Fallout at the new location via BuildProjectFile in
.fallout/parameters.json, and negate the unanchored [Bb]uild/ ignore for
this one tracked directory so new build-project files aren't silently
ignored.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Marko Lahma <marko.lahma@gmail.com>
Unrelated to the Fallout migration, but blocks any CI run: GHSA-4f7c-pmjv-c25w
(published 2026-04-10, patched in 3.3.0) fails solution restore with NU1902
under warnings-as-errors. The last green CI run predates the advisory
(2025-11-30); the first PR to trigger CI would hit this regardless.
log4net is referenced by test projects only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Marko Lahma <marko.lahma@gmail.com>
First fallout run rewrites .fallout/build.schema.json: NukeBuild ->
FalloutBuild definitions and the new BuildProjectFile property. The stale
"NUKE logo" literal in it is an upstream Fallout string that reappears on
every regeneration - left as is on purpose.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Marko Lahma <marko.lahma@gmail.com>
@lahma
lahma merged commit 902a258 into main Aug 8, 2026
3 checks passed
@lahma
lahma deleted the fallout branch August 8, 2026 12:48
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