chore(rebrand): rename Nuke.* → Fallout.* (namespaces, csprojs, assemblies, package IDs)#54
Merged
Merged
Conversation
…blies, package IDs) Closes #32. Mechanical 1:1 prefix swap per docs/rebrand-plan.md. Type identifier renames (NukeBuild, INukeBuild, NUKE_* env vars, credential store name) deferred to a follow-up PR per the scope-split decision in the #32 thread. ## What changed - 17 src/ folders + 8 tests/ folders renamed via git mv (history follows) - 26 .csproj files renamed in lockstep - 4 ancillary files renamed: Nuke.Common.props/.targets, Nuke.MSBuildTasks.targets, Nuke.Components.csproj.DotSettings - fallout.slnx repointed at every new path - Every ProjectReference path updated across all csprojs - namespace declarations + using directives + qualified type references swapped in ~625 .cs files via anchored regex (\bNuke\.) - AssemblyInfo.cs InternalsVisibleTo entries updated for first-party assemblies (external entries kept as Nuke.* — they refer to outside projects) - Constants.cs:29 nameof(Nuke) + "." + nameof(Common) replaced with the literal "Fallout.Common" (the nameof hack wouldn't compile after namespace rename anyway) - Tool wrapper JSON files (~70): inline namespace references swapped - GlobalTool templates/_build.csproj: PackageReference Nuke.Common → Fallout.Common (new user projects get the new brand from day one) - build/Build.cs: Solution.Nuke_X → Solution.Fallout_X (source-generator-emitted property names changed with the rename) - Verify snapshot at tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.cs regenerated ## Carve-outs preserved - Constants.UpstreamNukeRepository / UpstreamNukeRepositoryGit (deliberate legacy-recognition constants) - Constants.LegacyNukeDirectoryName = ".nuke" (back-compat for pre-Fallout consumer projects) - Telemetry.Properties.IsCommonType legacy NUKE recognition path - tests/Fallout.Build.Tests/GitRepositoryTest.cs + tests/Fallout.Common.Tests/GitHubTasksTest.cs URL parsing fixtures (hardcoded nuke-build/nuke URLs) - tests/Fallout.Tooling.Tests/NuGetPackageResolverTest.cs: real-world Nuke.Generation.Specifications package ID used as nuget.org integration fixture - src/Fallout.Utilities/EnvironmentInfo.SpecialFolder.cs:34 historical PR link - build/_build.csproj:33 commented-out NukeExternalFiles block referencing upstream URLs - README/CONTRIBUTING/CLAUDE.md attribution paragraphs - CHANGELOG history ## Verification - dotnet build fallout.slnx -c Debug: 0 errors, 15 pre-existing warnings (mostly CS1591 XML doc + Scriban CVE warning unrelated to rename) - dotnet test fallout.slnx: 392 passing, 7 skipped, 1 failing - The 1 failure is tests/Fallout.ProjectModel.Tests MSBuildProjectTest: System.IO.FileNotFoundException : Could not load file or assembly 'Microsoft.Build, Version=15.1.0.0'. The test was passing on main; the failure is reproducible in this Windows env after the rename but the root cause is unclear — looks like MSBuildLocator picking up a different MSBuild copy after the assembly name change. Likely Windows-specific. CI on ubuntu-latest will confirm. ## Deferred to follow-up PR - NukeBuild → FalloutBuild (96 uses), INukeBuild → IFalloutBuild (87 uses) - Internal identifiers: NukeFileName, NukeDirectoryName, NukeCommonPackageId, NukeVersion, GetNukeDirectory, GlobalNukeDirectory, NukeTelemetryVersion - Environment variables: NUKE_GLOBAL_TOOL_VERSION, NUKE_GLOBAL_TOOL_START_TIME, NUKE_INTERNAL_INTERCEPTOR, NUKE_TELEMETRY_OPTOUT (with deprecation fallback) - Credential store name prefix "NUKE: ..." (with migration handling) - Telemetry property keys version_nuke_common, version_nuke_global_tool ## Downstream now unblocked - #36 (Roslyn codefix), #37 (migration guide), #47 (shim packages), #48 (migrator CLI) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Runtime session lock file from the Claude Code harness — got swept in by the prior commit's git add -A. Untracking it and adding to .gitignore so future runs don't reintroduce it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
) MSBuildProjectTest failed with `FileNotFoundException: Microsoft.Build, Version=15.1.0.0` because the JIT resolves the test method's local of type Microsoft.Build.Evaluation.Project before any code in Fallout.ProjectModel.dll runs — so before its [ModuleInitializer] can install the MSBuildLocator AssemblyResolve handler. Adds a [ModuleInitializer] in the test assembly that invokes ProjectModelTasks.Initialize() to force-load Fallout.ProjectModel (and run its module init) at test-assembly load time. typeof() alone is not enough — the runtime requires an actual method invocation to fire a foreign assembly's module initializer. Latent issue on main too; the rename perturbed load order enough to surface it. Sibling ProjectTest avoided the trap by wrapping the call in an Action lambda. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 20, 2026
ChrisonSimtian
added a commit
that referenced
this pull request
May 20, 2026
…utBuild (#59) Mechanical type-identifier rename deferred from #54. ## What changed - 7 files renamed (git mv preserves history): - src/Fallout.Build/NukeBuild.{,Events,Interface,Statics,Output}.cs → FalloutBuild.{,Events,Interface,Statics,Output}.cs - src/Fallout.Build/INukeBuild.cs → IFalloutBuild.cs - src/Fallout.SourceGenerators/Shims/NukeBuild.cs → FalloutBuild.cs - ~281 identifier occurrences across 84 files swapped via anchored regex (\bNukeBuild\b, \bINukeBuild\b) - Verify snapshots (cake-scripts/*.verified.cs, SchemaUtilityTest verified.json) updated to match the new generator output - build/Build.cs (this repo's own build script) updated alongside ## Carve-outs preserved - CHANGELOG.md — historical entries reference the old types verbatim - .fallout/build.schema.json — regenerated by the build, not hand-edited ## Out of scope (follow-up PRs) While auditing, I found more identifiers carrying the legacy Nuke brand than the issue body anticipated: - Constants.cs internals: NukeFileName, NukeDirectoryName, NukeCommonPackageId, GetNukeDirectory, GlobalNukeDirectory - MSBuild target / property names (consumer-visible, BREAKING): NukeTasksAssembly, NukeContinueOnError, NukeTaskTimeout, NukeBaseDirectory, NukeUseNestedNamespaces, NukeRepositoryUrl, NukeUpdateReferences, NukeExternalFiles, NukePackPackageTools, NukeEmbedPackagesForSelfContained, NukeCodeGeneration, NukeSpecificationFiles, NukeBaseNamespace, NukeTasksDirectory, NukeTasksEnabled, NukeDefaultExcludes, NukeRootDirectory, NukeScriptDirectory, NukeTelemetryVersion - Env vars (NUKE_TELEMETRY_OPTOUT, NUKE_GLOBAL_TOOL_*, NUKE_INTERNAL_INTERCEPTOR) - Credential store name prefix "NUKE: ..." - Telemetry property keys version_nuke_common, version_nuke_global_tool The MSBuild props are consumer-visible and need their own deprecation discussion (set both old + new for a release? Read both with warning?). Env vars + credential store need migration logic. Splitting these out keeps the diff reviewable and lets each concern get its own design call. #57 updated to reflect the expanded scope. ## Verification - dotnet build fallout.slnx -c Debug: 0 errors, 15 pre-existing warnings - dotnet test fallout.slnx: 391 passed, 7 skipped, 0 failed Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 21, 2026
ChrisonSimtian
added a commit
that referenced
this pull request
May 21, 2026
Closes #38. ## Changes - src/Fallout.GlobalTool/Fallout.GlobalTool.csproj: <ToolCommandName> flipped from `nuke` to `fallout`. Anyone installing the next published version of Fallout.GlobalTool gets `dotnet fallout` (not `dotnet nuke`). - src/Fallout.GlobalTool/Program.Complete.cs: CommandName constant flipped to "fallout". Shell completion parses `fallout <args>` now. - docs/01-getting-started/01-installation.md: post-install path-check hint references `where fallout`. - docs/architecture.md: package table + dotnet command refreshed Nuke.* → Fallout.* (the rest of the file was already updated by #54; this row was missed). ## Migration impact Existing users on `Nuke.GlobalTool` keep `dotnet nuke`; they're a different package, untouched. Existing users who already pulled `Fallout.GlobalTool` (published earlier today at 10.2.x with the legacy `nuke` ToolCommandName) will see `dotnet nuke` flip to `dotnet fallout` on next update. That's expected — Fallout.GlobalTool has been on nuget.org for hours, not days; no established muscle memory yet. Migration guide (#37) will call this out. ## Verification - dotnet build fallout.slnx -c Debug: 0 errors, 15 pre-existing warnings - dotnet test fallout.slnx: 391 passed, 7 skipped, 0 failed Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ChrisonSimtian
added a commit
that referenced
this pull request
May 21, 2026
… update CI header (#67) * chore(rebrand): regenerate tool wrappers + update CI config header Closes #39. ## Changes ### CI config generator - src/Fallout.Build/CICD/ConfigurationAttributeBase.cs: generated YAML/ Kotlin header comment now reads "fallout --generate-configuration ..." instead of "nuke --generate-configuration ...". - .github/workflows/{ubuntu,windows,macos}-latest.yml: refreshed headers to match. Tests under tests/Fallout.Common.Tests/CI/*.verified.txt re-baselined alongside (6 snapshots, one header line each). ### Tool wrappers - build/Build.CodeGeneration.cs: SpecificationsDirectory was pointing at the pre-#54 `source/` directory; GlobFiles returned empty and the GenerateTools target silently no-op'd. Fixed to `src/`. - 62 Generated.cs files regenerated via `GenerateTools`. Picks up the WriterExtensions.cs URL update made earlier in the rebrand — every `<remarks>` block now links to github.com/ChrisonSimtian/Fallout instead of the dead `https://www.nuke.build/docs/...` URL. Also picks up the GitHub source-file URL change from `nuke-build/nuke` paths to `ChrisonSimtian/Fallout`. - .fallout/build.schema.json: regenerated as a side-effect. ## Verification - dotnet build fallout.slnx -c Debug: 0 errors, 11 pre-existing warnings - dotnet test fallout.slnx: 391 passed, 7 skipped, 0 failed - Spot check: src/Fallout.Common/Tools/Boots/Boots.Generated.cs no longer contains "nuke.build"; remarks link now points at github.com/ChrisonSimtian/Fallout Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci: nudge workflow trigger * fix(ci): emit `paths-ignore` instead of negative-only `paths` filter PR #67 didn't trigger ubuntu-latest CI — root cause: the GitHub Actions trigger generator emits a `paths:` block of only `!`-prefixed entries when only ExcludePaths is configured (no IncludePaths). GitHub treats that as "fire only when files match these negative patterns", which is never true, so the workflow never runs. Fix in GitHubActionsVcsTrigger.cs: when only ExcludePaths is set, emit `paths-ignore:` (without `!`) instead of `paths:` with negative-only entries. Mixed include+exclude still uses `paths:` as before. The repo's own .github/workflows/ubuntu-latest.yml regenerated as a side-effect — now uses `paths-ignore`. Expectation: this PR's next push finally fires the ubuntu-latest workflow. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ChrisonSimtian
added a commit
that referenced
this pull request
May 21, 2026
Closes part of #48 (MVP — see "What's NOT in this PR" below). ## What it does A new `dotnet tool` that walks a consumer repo and rewrites the NUKE-era artifacts into their Fallout equivalents in place: dotnet tool install -g Fallout.Migrate cd path/to/my-nuke-repo fallout-migrate # apply fallout-migrate --dry-run # preview without writing Transformations: | Layer | Rewriter | What changes | |---|---|---| | `.csproj` | CsprojRewriter | PackageReference Include="Nuke.X" → Fallout.X; MSBuild props on the known P3.5b list (NukeRootDirectory, NukeBaseDirectory, NukeTelemetryVersion, NukeTasksEnabled, …) → Fallout* | | `.cs` | CodeRewriter | `\bNuke\.(?=[A-Z])` → `Fallout.` for using directives, attribute namespaces, qualified type references; `\bNukeBuild\b` → `FalloutBuild`; `\bINukeBuild\b` → `IFalloutBuild` | | `build.{cmd,ps1,sh}` | ScriptRewriter | `dotnet nuke` → `dotnet fallout`; `.nuke/` path references → `.fallout/`; legacy NUKE_* env vars → FALLOUT_* | | `.nuke/` dir | DirectoryRenamer | Renames to `.fallout/` (warning emitted if both exist) | Each rewriter uses anchored regex matching the same approach the rebrand itself used in #54 / #59 (`\bNuke\.` with case-aware lookaheads). Internal regex-only — no Roslyn dependency, no MSBuild evaluation, keeps the tool a single small binary. ## Output fallout-migrate — migrating: /path/to/repo edit build/_build.csproj (3 changes) edit build/Build.cs (2 changes) edit build.sh (2 changes) rename .nuke -> .fallout Files changed: 3 Edits made: 7 Directories: 1 renamed Migration complete. Verify the build: ./build.ps1 (or ./build.sh on unix) ## Tests 17 tests: - CsprojRewriterTest: PackageReference, MSBuild property, false-positive guard, no-op - CodeRewriterTest: using directive, qualified type, NukeBuild, INukeBuild, partial-identifier guard, lowercase .nuke guard - ScriptRewriterTest: dotnet nuke, .nuke dir refs, env vars, plain-word guard - MigrationIntegrationTest: end-to-end vanilla fixture (csproj+cs+sh+.nuke), dry-run, both-dirs warning Plus a manual end-to-end smoke from a fixture in /tmp confirmed dry-run output matches the expected diff. ## What's NOT in this PR (deferred) - Roslyn-based AST rewrites — kept it regex-only for MVP. The issue mentions reusing the Cake rewriting infrastructure; that's more appropriate when we hit cases regex can't handle (e.g. partial identifier disambiguation, semantic-aware refactors). None observed in vanilla consumer repos yet. - Tested on a real external NUKE consumer repo — volunteer needed per the issue's "Done when" list. Open follow-up. - Published to GitHub Packages — release pipeline will pick this up on next push to main since the project is in fallout.slnx and PackAsTool=true. - Link from migration guide (#37) — that PR doesn't exist yet. ## Side-effect StronglyTypedSolutionGeneratorTest verify snapshot regenerated — solution generator now emits Solution.Fallout_Migrate and Solution.Fallout_Migrate_Tests properties from the two new projects. ## Verification - dotnet build src/Fallout.Migrate: 0 errors, 0 warnings - dotnet test fallout.slnx: 408 passed (was 391; +17 new), 7 skipped, 0 failed - End-to-end dry-run on /tmp fixture: edits + rename reported correctly Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ChrisonSimtian
added a commit
that referenced
this pull request
May 22, 2026
CLAUDE.md no longer claimed the Nuke.* → Fallout.* structural rename was pending — that landed in #54, #60, #65, #66 ages ago. Updates the rebrand-status paragraph, the src/tests layout table, the production project groupings (now including Fallout.Migrate and the vendored Fallout.VisualStudio.SolutionPersistence), the tool-wrapper paths, and fixes the CI-revival roadmap link from #7 (which is the CodeQL ticket) to #8 (the actual CI-revival tracker). README.md said releases publish to GitHub Packages — nuget.org has been the primary feed since #58. Build-status table also had three URLs hardcoded to ChrisonSimtian/nuke (the pre-rename slug). Also notes the new docs-only paths-ignore on the release workflow. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #32. Mechanical 1:1 prefix swap per
docs/rebrand-plan.md. Type identifier renames (NukeBuild,INukeBuild,NUKE_*env vars, credential store name) are deliberately deferred to a follow-up PR — see the scope-split decision on #32.What changed
src/folders + 8tests/folders renamed viagit mv(history follows the rename).csprojfiles renamed in lockstepNuke.Common.props/.targets,Nuke.MSBuildTasks.targets,Nuke.Components.csproj.DotSettingsfallout.slnxrepointed at every new path (26<Project>entries)ProjectReferencepath updated across every csprojnamespacedeclarations +usingdirectives + qualified type references swapped in ~625.csfiles via anchored regex (\bNuke\.)AssemblyInfo.csInternalsVisibleToentries updated for first-party assemblies; external entries (Nuke.VisualStudio,ReSharper.Nuke,Nuke.Remote.Functions,Nuke.Website.Functions) kept asNuke.*because they refer to outside-this-repo projectsConstants.cs:29:nameof(Nuke) + "." + nameof(Common)replaced with the literal"Fallout.Common"(thenameofhack wouldn't compile after namespace rename anyway)templates/_build.csproj:PackageReference Nuke.Common→Fallout.Common(new user projects get the new brand from day one)build/Build.cs:Solution.Nuke_X→Solution.Fallout_X(source-generator emits these from project names; rename cascaded automatically, call sites needed manual update)tests/Fallout.SourceGenerators.Tests/StronglyTypedSolutionGeneratorTest.Test#Solution.g.verified.csCarve-outs preserved
Constants.UpstreamNukeRepository/UpstreamNukeRepositoryGitConstants.LegacyNukeDirectoryName = ".nuke"Telemetry.Properties.IsCommonTypelegacy-NUKE pathRepositoryUrltests/Fallout.Build.Tests/GitRepositoryTest.cs,tests/Fallout.Common.Tests/GitHubTasksTest.csnuke-build/nukeURLstests/Fallout.Tooling.Tests/NuGetPackageResolverTest.csNuke.Generation.Specificationsnuget.org package as integration fixturesrc/Fallout.Utilities/EnvironmentInfo.SpecialFolder.cs:34build/_build.csproj:33commentedNukeExternalFilesblockREADME.md/CONTRIBUTING.md/CLAUDE.mdattribution paragraphsCHANGELOG.mdhistorical entriesVerification
dotnet build fallout.slnx -c Debugdotnet test fallout.slnxgrep -rE '\bNuke\.' src/ build/ tests/ -- ":!CHANGELOG.md" ":!README.md" ":!CONTRIBUTING.md" ":!CLAUDE.md" ":!docs/"The one failing test
Fallout.ProjectModel.Tests.MSBuildProjectTest—System.IO.FileNotFoundException : Could not load file or assembly 'Microsoft.Build, Version=15.1.0.0'.Nuke.ProjectModel.Tests.csproj(verified bygit stash+ run +git stash pop).ModuleInitializer/MSBuildLocatorinteraction sensitive to the assembly name change.I'm letting CI on
ubuntu-latestgive the authoritative read. If green there, the test is the only follow-up; if also red there, this needs investigation before merge.Deferred to follow-up PR
NukeBuild(96 uses),INukeBuild(87 uses)FalloutBuild/IFalloutBuildNukeFileName,NukeDirectoryName,NukeCommonPackageId,NukeVersion,GetNukeDirectory,GlobalNukeDirectory,NukeTelemetryVersionFalloutNUKE_GLOBAL_TOOL_VERSION,NUKE_GLOBAL_TOOL_START_TIME,NUKE_INTERNAL_INTERCEPTOR,NUKE_TELEMETRY_OPTOUTenv varsFALLOUT_*with one-cycleNUKE_*fallback for migration"NUKE: ...""Fallout: ..."with read-fallback on legacy prefixversion_nuke_*version_fallout_*Downstream now unblocked
using Nuke.* → Fallout.*)Nuke.<X>type-forwarding shim packages on GH Packages feed)Fallout.MigrateCLI)🤖 Generated with Claude Code