[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826 - #11945

Merged
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup
Jul 1, 2026
Merged

[xaprepare] Remove BuildInfo / GitRunner.Blame orphans left by #11826#11945
jonathanpeppers merged 1 commit into
mainfrom
jonathanpeppers-xaprepare-buildinfo-cleanup

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Follow-up to #11826, which moved XABuildConfig generation to AndroidBuildConfig.dll and removed the instance members from BuildInfo that consumed the dead cascade. This PR deletes that cascade — all of it was out-of-scope in the previous PR.

Part of the incremental removal of xaprepare — precedents: #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826.

What was removed

FileΔNotes
build-tools/xaprepare/xaprepare/Application/BuildInfo.cs−101Whole file — all members orphan (DetermineLastVersionChangeCommit, CommitOfLastVersionChange, VersionHash, GetCommitDate, GetTZOffset, CreateGitRunner).
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.cs−169Whole file — BlameParserState + BlamePorcelainEntry only referenced by deleted Blame code.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs−59Three Blame(...) overloads, ParseBlameLine, and the now-unused SetCommandArguments helper.
build-tools/xaprepare/xaprepare/Application/Context.cs−7BuildInfo property + XML doc + Init() assignment.
build-tools/xaprepare/xaprepare/Application/Utilities.cs−11ShortenGitHash.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs−5AbbreviatedHashLength — the only consumer was ShortenGitHash.
build-tools/xaprepare/xaprepare/BuildInfo.cs.in±1partial class BuildInfostatic class BuildInfo. Only XAVersion const remains; Main.cs still uses it.

Total: 7 files changed, 1 insertion, 353 deletions.

Audit

$ git --no-pager grep -nE 'DetermineLastVersionChangeCommit|CommitOfLastVersionChange|VersionHash|ShortenGitHash|BlamePorcelainEntry|BlameParserState|GitRunner\.Blame|AbbreviatedHashLength' -- build-tools/xaprepare
(no output)
$ git --no-pager grep -nE 'BuildInfo\.' -- build-tools/xaprepare
build-tools/xaprepare/xaprepare/Main.cs:78: $".NET for Android v{BuildInfo.XAVersion} preparation utility",
build-tools/xaprepare/xaprepare/xaprepare.csproj:14: <Compile Include="$(IntermediateOutputPath)/BuildInfo.Generated.cs" />
build-tools/xaprepare/xaprepare/xaprepare.targets:29: <BuildInfoInFile>BuildInfo.cs.in</BuildInfoInFile>
build-tools/xaprepare/xaprepare/xaprepare.targets:30: <BuildInfoOutFile>$(IntermediateOutputPath)\BuildInfo.Generated.cs</BuildInfoOutFile>

Only the intentional BuildInfo.XAVersion usage in Main.cs and the build-system paths remain.

Verification

  • dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug0 warnings, 0 errors.
  • build.cmd -t:Prepare -c Debug → succeeded.

Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com

Follow-up to #11826. After that PR moved XABuildConfig generation to AndroidBuildConfig.dll and removed instance members from BuildInfo, the entire cascade downstream of `BuildInfo.DetermineLastVersionChangeCommit` became unreachable.
Removed:
* `Application/BuildInfo.cs` (whole file — all members orphan)
* `ToolRunners/GitRunner.BlamePorcelainEntry.cs` (whole file)
* `GitRunner` `Blame(...)` overloads (3), `ParseBlameLine`, and now-unused `SetCommandArguments` helper
* `Context.BuildInfo` property + assignment in `Init()`
* `Utilities.ShortenGitHash` and its only consumer `Configurables.Defaults.AbbreviatedHashLength`
`BuildInfo.cs.in` was changed from `partial class` to `static class` since only `XAVersion` remains; `Main.cs` still uses `BuildInfo.XAVersion`.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 1, 2026 20:15

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the incremental removal of xaprepare by deleting an orphaned “build info via git blame” cascade that was left behind after XABuildConfig generation moved out of xaprepare in #11826.

Changes:

  • Removed the GitRunner.Blame(...) implementation and the associated porcelain parser types.
  • Deleted the now-unused BuildInfo instance implementation and removed it from Context.
  • Simplified the generated BuildInfo template down to a static holder for XAVersion only, and removed the last helper (ShortenGitHash) + its configurable.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.csRemoves blame API surface and related helpers.
build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.BlamePorcelainEntry.csDeletes blame porcelain parsing types now made unreachable.
build-tools/xaprepare/xaprepare/Application/BuildInfo.csDeletes the orphaned BuildInfo instance implementation.
build-tools/xaprepare/xaprepare/Application/Context.csRemoves the BuildInfo property and initialization.
build-tools/xaprepare/xaprepare/Application/Utilities.csRemoves ShortenGitHash helper.
build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.csRemoves AbbreviatedHashLength constant (no remaining consumers).
build-tools/xaprepare/xaprepare/BuildInfo.cs.inConverts BuildInfo template to a static class with only XAVersion.
Comments suppressed due to low confidence (1)

build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs:218

  • Avoid the null-forgiving operator here. With nullable enabled in this project, workingDirectory! is unnecessary and violates the repo rule to never use !. You can restructure the check to make the non-null flow explicit.
 if (!String.IsNullOrEmpty (workingDirectory))
return workingDirectory!;
return BuildPaths.XamarinAndroidSourceRoot;

@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 1, 2026 22:22
@jonathanpeppers
jonathanpeppers merged commit 978defb into mainJul 1, 2026
43 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-xaprepare-buildinfo-cleanup branch July 1, 2026 22:46
simonrozsival pushed a commit that referenced this pull request Jul 3, 2026
…xaprepare project (#11959)
Follow-up to #11956, which moved the JDK half of `Configuration.OperatingSystem.props` to Java.Interop's `JdkInfo.props`. The remaining NDK / OS-info half has zero real consumers, so this PR:
1. Deletes the last generator template (`Configuration.OperatingSystem.props.in`).
2. Cascades through `Step_GenerateFiles`, both `Scenario_*` classes (which now had zero steps), and every supporting `OperatingSystems/`, `Context.*OS.cs`, `EssentialTools.*`, `ToolRunners/*`, `Configurables.*`, `Application/*`, and `Main.cs` file that only existed to feed the scenarios.
3. Deletes the whole `build-tools/xaprepare/` project.
4. Patches every integration point (`Makefile`, `PrepareWindows.targets`, `BuildEverything.mk`, CI YAML, docs) so `build.cmd -t:Prepare` and `make prepare` still work end-to-end.
## `Configuration.OperatingSystem.props.in` placeholder audit
| Placeholder | Consumers outside the `.in` file | Action |
| --- | --- | --- |
| `HostOsName` | none | drop |
| `HostOsFlavor` | none | drop |
| `HostOsRelease` | none | drop |
| `HostBits` | none (`ArchiveBase.HostBits` in `src/Xamarin.Installer.AndroidSDK/` is an unrelated C# property) | drop |
| `NdkLlvmTag` | none (the NDK toolchain OS tag is resolved elsewhere via `_NdkToolchainOSTag` in `androidsdk.targets`) | drop |
| `HostCpuCount` | only `Configuration.props:72` via `$(MakeConcurrency)` | drop |
## `$(MakeConcurrency)` audit
The only definition was `Configuration.props:72`. A repo-wide grep of `.targets`, `.props`, `.projitems`, `Makefile`, and `.mk` files found zero consumers of the MSBuild property. The `MakeConcurrency` hits under `build-tools/xaprepare/` were an unrelated C# `Context.MakeConcurrency` property.
**Result:** dropped the `MakeConcurrency` MSBuild property entirely (no `$([System.Environment]::ProcessorCount)` replacement needed) and removed the `$(MakeConcurrency)` bullet in `Documentation/building/configuration.md`.
## xaprepare integration audit (grep-confirmed, patched here)
| Location | Change |
| --- | --- |
| `build-tools/xaprepare/` (entire tree) | **deleted** — 86 tracked files |
| `Configuration.props` | dropped `<Import>` of the generated OS props, dropped `MakeConcurrency`, tidied the "between xaprepare and package creation tools" comment |
| `.gitignore` | dropped `Configuration.OperatingSystem.props` |
| `build-tools/scripts/PrepareWindows.targets` | removed `_XAPrepareExe`, `_XAPrepareStandardArgs`, `_BuildXAPrepare` target, and the `Exec dotnet $(_XAPrepareExe)` line. Repointed `Prepare` at `_InstallDotNet`. Kept the space-in-path guard, BootstrapTasks / workloads MSBuilds, and `PrepareJavaInterop` |
| `Makefile` | dropped `PREPARE_PROJECT`, `PREPARE_NET_FX`, `PREPARE_ARGS`, `PREPARE_MSBUILD_FLAGS`, `PREPARE_SCENARIO`, `PREPARE_CI_PR`, `PREPARE_CI`, `_PREPARE_CI_MODE_*`, `_PREPARE_ARGS`, and all their conditionals. Dropped the `dotnet run --project xaprepare.csproj` line from `prepare`. Deleted the `prepare-help` target |
| `build-tools/scripts/BuildEverything.mk` | `jenkins` no longer branches on `PREPARE_CI_PR`/`PREPARE_CI`; just `$(MAKE) prepare && $(MAKE) leeroy` |
| `.github/workflows/copilot-setup-steps.yml` | dropped now-unused `PREPARE_CI=1` |
| `build-tools/automation/azure-pipelines-apidocs.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-linux-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/build-macos-steps.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/commercial-build.yaml` | dropped `PREPARE_CI=1` |
| `build-tools/automation/yaml-templates/copy-extra-result-files.yaml` | dropped `**/Configuration.OperatingSystem.props` glob and the stale `Step_CopyExtraResultFilesForCI` xaprepare-step comment |
| `build-tools/automation/yaml-templates/generate-cgmanifest.yaml` | dropped the stale `Step_GenerateCGManifest` xaprepare-step comment |
| `build-tools/automation/yaml-templates/setup-jdk-variables.yaml` | renamed `$xaPrepareJdkPath` → `$xaJdkPath` for hygiene |
| `Documentation/workflow/HowToAddNewApiLevel.md` | rewrote the "Add New Platform" section to point at `<_PlatformPackage>` entries in `src/androidsdk/androidsdk.targets` instead of `AndroidToolchain.cs`; updated the `--android-sdk-platforms=all` recipe to `dotnet-local build src/androidsdk/androidsdk.csproj -p:AndroidSdkPlatforms=all` |
| `Documentation/building/unix/dependencies.md` | JDK-version link now points at `$(MicrosoftOpenJDKVersion)` in `/Configuration.props` instead of the deleted `Configurables.cs` |
| `Documentation/building/configuration.md` | removed the `$(MakeConcurrency)` bullet |
**Historical breadcrumb comments left as-is** (still accurate and useful for git-archaeology):
- `.github/skills/update-tpn/SKILL.md`
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`
- `src/androidsdk/androidsdk.targets`
- `src/native/cmake-config/cmake-config.csproj`
- `src/workloads/workloads.csproj`
## Verification
- `build.cmd Prepare` — succeeded end-to-end on Windows (0 warnings, 0 errors). The trimmed `Prepare` target ran through `_InstallDotNet`, the space-in-path guard, `Xamarin.Android.BootstrapTasks.sln`, `src/workloads/workloads.csproj`, and `PrepareJavaInterop`.
- `dotnet build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug` — 0 errors (93 pre-existing warnings from `src/Mono.Android/` and generated MCW, unrelated to this change).
- Repo-wide grep for `HostOsName`, `HostOsFlavor`, `HostOsRelease`, `HostCpuCount`, `NdkLlvmTag`, and the MSBuild `MakeConcurrency` property — clean.
- Repo-wide grep for `xaprepare` — clean apart from the five intentional historical breadcrumb comments listed above.
## Diff stat
102 files changed, 25 insertions(+), 7891 deletions(-).
## Precedent chain
Continues the multi-slice teardown started by #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821, #11825, #11826, #11945, #11946, #11956.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 1, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jonathanpeppers@simonrozsival