chore(rebrand): finish P3.5 — MSBuild props, env vars, credential store, telemetry keys#65
Merged
Merged
Conversation
…rning Refs #57. ## Properties renamed All consumer-facing MSBuild properties exposed by Fallout.Common.targets and Fallout.MSBuildTasks.targets are now Fallout*-prefixed. Legacy Nuke* names remain functional for the 10.x line — to be removed in 11.0. ### Consumer-set (17) NukeRootDirectory, NukeScriptDirectory, NukeTelemetryVersion, NukeBaseDirectory, NukeBaseNamespace, NukeUseNestedNamespaces, NukeRepositoryUrl, NukeUpdateReferences, NukeContinueOnError, NukeTaskTimeout / NukeTimeout, NukeTasksEnabled, NukeDefaultExcludes, NukeExcludeBoot / Config / Logs / DirectoryBuild / Ci, NukeSpecificationFiles (item group), NukeExternalFiles (item group). ### Internal (2) NukeTasksAssembly, NukeTasksDirectory. ## How the fallback works Each Fallout* prop is set in this order: 1. If FalloutX is already set, use it. 2. Else if legacy NukeX is set, lift its value into FalloutX. 3. Else apply the default. So an existing .csproj setting NukeBaseDirectory keeps producing the exact same effective FalloutBaseDirectory value. Targets internally reference only $(FalloutX). ## FALLOUT001 warning The Fallout.Common.targets file declares an ItemGroup of detected legacy properties and emits one MSBuild warning per detected item: warning FALLOUT001: MSBuild property 'NukeBaseDirectory' is deprecated; rename to 'FalloutBaseDirectory'. The legacy name still works in 10.x but will be removed in 11.0. Helps consumers spot every project that needs updating. ## Target name aliases Targets NukeExternalFiles, NukePackPackageTools, NukeEmbedPackagesForSelfContained, NukeCodeGeneration kept as no-op stubs that DependsOnTargets="FalloutX". Anyone using BeforeTargets="NukeCodeGeneration" keeps working. ## Dogfood Updated build/_build.csproj in this repo to use the new names — verified FALLOUT001 warnings no longer fire on our own build. ## Template update src/Fallout.GlobalTool/templates/_build.csproj now emits Fallout* names — fresh `dotnet fallout :setup` runs get the new world from day one. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Renames the four legacy env var keys to FALLOUT_*, with readers falling
back to NUKE_* if only the legacy is set. Each fallback path emits a
one-time FALLOUT002 warning to stderr.
NUKE_TELEMETRY_OPTOUT → FALLOUT_TELEMETRY_OPTOUT
NUKE_GLOBAL_TOOL_VERSION → FALLOUT_GLOBAL_TOOL_VERSION
NUKE_GLOBAL_TOOL_START_TIME → FALLOUT_GLOBAL_TOOL_START_TIME
NUKE_INTERNAL_INTERCEPTOR → FALLOUT_INTERNAL_INTERCEPTOR
## Mechanism
New helper Fallout.Common.LegacyEnvironment (in Fallout.Build.Shared)
reads the preferred name, falls back to the legacy with a one-time
stderr warning, and otherwise returns null. Used by:
- FalloutBuild.IsInterceptorExecution
- Telemetry.Properties global tool version + start time reads
Telemetry opt-out uses ParameterService.GetParameter with a manual
fallback chain (no warning — opt-out check runs before logging is up
and warning a user who's actively trying to opt out feels backwards).
## Symbol stability
The Telemetry.OptOutEnvironmentKey public constant keeps its name but
its value flips from "NUKE_TELEMETRY_OPTOUT" to "FALLOUT_TELEMETRY_OPTOUT".
Any caller using the symbol gets the new name automatically. Added
Telemetry.LegacyOptOutEnvironmentKey for the legacy.
Constants.{GlobalToolVersion,GlobalToolStartTime,Interceptor}EnvironmentKey
ditto — symbol stable, value updated, paired Legacy* constants added.
## Repo-side updates
- build.sh, build.ps1, build/Build.cs: emit FALLOUT_TELEMETRY_OPTOUT now
- CLAUDE.md telemetry convention note updated
- docs/01-getting-started/07-telemetry.md notes both names
- tests/Fallout.Build.Tests/ExecutionTestsInitializer.cs unchanged — it
uses the OptOutEnvironmentKey symbol which now resolves to the new value
## Verification
- dotnet build fallout.slnx -c Debug: 0 errors, 14 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>
## Credential store
`Constants.GetCredentialStoreName` now returns the canonical
`"Fallout: {root} ({profile})"` keychain entry name. Added
`GetLegacyCredentialStoreName` returning the legacy `"NUKE: ..."` form.
Readers (`CredentialStore.GetPassword` for build-time secret lookup,
`Program.Secrets` for the global tool's `dotnet fallout :secrets`
command) try the canonical entry first, fall back to legacy on miss:
- Build-time path: prints FALLOUT003 stderr warning + uses legacy
password for that run; user must re-run `:secrets` to migrate.
- :secrets command path: prints a Host.Warning, opportunistically
re-saves the legacy password to the canonical entry so subsequent
loads hit the canonical key directly.
Writers (`CredentialStore.SavePassword`, `DeletePassword`) always emit
the canonical form. Legacy entry is never written to or deleted
automatically — left intact so 10.x can still pick it up on miss.
## Telemetry version property
`Telemetry.VersionPropertyName` flips from `"NukeTelemetryVersion"` to
`"FalloutTelemetryVersion"`. Added `LegacyVersionPropertyName` for the
legacy lookup — `ConfirmVersion` checks the canonical name first, falls
back to legacy if the user's `_build.csproj` still uses the old name.
This pairs with the MSBuild prop deprecation earlier in this branch:
the user's `_build.csproj` can have either property set; the Fallout*
form is preferred but Nuke* keeps working.
## Verification
- dotnet build fallout.slnx -c Debug: 0 errors, 14 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 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.
Summary
Finishes the remaining P3.5 deferrals from #54. Three deprecation-flavored commits covering the consumer-facing surfaces, plus the telemetry property keys (mechanical):
FALLOUT001-warning. Target name aliases preserved.FALLOUT002-stderr-warning.FALLOUT003warning. Opportunistic migration on:secrets.Closes #57.
Compatibility story
For every consumer-set surface (MSBuild prop, env var, keychain entry, telemetry version property), Fallout 10.x reads the new
Fallout*form first and falls back to the legacyNuke*form with a one-time deprecation warning. Nothing breaks for existing consumers. Legacy support is removed in 11.0.The remaining direction is one-way: Fallout 10.x writes only to the canonical
Fallout*names. Mixing an older global tool with a newer build script (or vice versa) on the same machine is fine for the legacy → new direction, but new → legacy doesn't fall back (acceptable — global tool + build versions are typically kept in lockstep).Warning codes
FALLOUT001Nuke*MSBuild property set in a.csproj.FALLOUT002NUKE_*env var read at runtime.FALLOUT003Dogfood
This repo's own
build/_build.csproj,build/Build.cs,build.sh,build.ps1, andCLAUDE.mdupdated to use the new names.FALLOUT001warnings no longer fire on our own build.Out of scope (deliberate)
_NUKE_VERSION_placeholder in_build.csprojtemplate — internal template substitution, pure cleanup, deferred.NukeCodeGenerationetc.) — kept asDependsOnTargetsaliases for back-compat. Can be renamed in 11.0.Verification
dotnet build fallout.slnx -c Debug: 0 errors, 14 pre-existing warnings (Helm/DockerCS0108, Scriban CVE).dotnet test fallout.slnx: 391 passed, 7 skipped, 0 failed.Test plan
ubuntu-latestCI greenFALLOUT001warnings appear and the build still worksNUKE: ...keychain entry pre-merge, build post-merge, seeFALLOUT003fire and password still load🤖 Generated with Claude Code