Skip to content

chore(rebrand): finish P3.5 — MSBuild props, env vars, credential store, telemetry keys#65

Merged
ChrisonSimtian merged 3 commits into
mainfrom
chore/p3.5-finish
May 21, 2026
Merged

chore(rebrand): finish P3.5 — MSBuild props, env vars, credential store, telemetry keys#65
ChrisonSimtian merged 3 commits into
mainfrom
chore/p3.5-finish

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Summary

Finishes the remaining P3.5 deferrals from #54. Three deprecation-flavored commits covering the consumer-facing surfaces, plus the telemetry property keys (mechanical):

Commit Scope Risk
571d11a MSBuild properties (17 consumer-set + 2 internal) Read-both-with-FALLOUT001-warning. Target name aliases preserved.
88c5b16 Env vars (4) Read-both-with-FALLOUT002-stderr-warning.
35dcc8e Credential store + telemetry version property Read-canonical-first, fall back to legacy with FALLOUT003 warning. 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 legacy Nuke* 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

Code Channel What
FALLOUT001 MSBuild Warning Legacy Nuke* MSBuild property set in a .csproj.
FALLOUT002 stderr Legacy NUKE_* env var read at runtime.
FALLOUT003 stderr / Host.Warning Legacy credential-store keychain entry found.

Dogfood

This repo's own build/_build.csproj, build/Build.cs, build.sh, build.ps1, and CLAUDE.md updated to use the new names. FALLOUT001 warnings no longer fire on our own build.

Out of scope (deliberate)

  • The _NUKE_VERSION_ placeholder in _build.csproj template — internal template substitution, pure cleanup, deferred.
  • Target name renames (NukeCodeGeneration etc.) — kept as DependsOnTargets aliases for back-compat. Can be renamed in 11.0.

Verification

  • dotnet build fallout.slnx -c Debug: 0 errors, 14 pre-existing warnings (Helm/Docker CS0108, Scriban CVE).
  • dotnet test fallout.slnx: 391 passed, 7 skipped, 0 failed.

Test plan

  • ubuntu-latest CI green
  • Re-run your other Fallout-consuming project — confirm FALLOUT001 warnings appear and the build still works
  • (Optional) Test the credential store migration on macOS: create a NUKE: ... keychain entry pre-merge, build post-merge, see FALLOUT003 fire and password still load

🤖 Generated with Claude Code

ChrisonSimtian and others added 3 commits May 21, 2026 12:48
…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
ChrisonSimtian merged commit f7cd821 into main May 21, 2026
1 check passed
@ChrisonSimtian
ChrisonSimtian deleted the chore/p3.5-finish branch May 21, 2026 01:05
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>
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.

[P3.5] Complete the type identifier + env var + credential rename deferred from #54

1 participant