Skip to content

[xaprepare] Remove vestigial OS dependency provisioning#11803

Merged
simonrozsival merged 4 commits into
mainfrom
jonathanpeppers-remove-os-dep-provisioning
Jun 30, 2026
Merged

[xaprepare] Remove vestigial OS dependency provisioning#11803
simonrozsival merged 4 commits into
mainfrom
jonathanpeppers-remove-os-dep-provisioning

Conversation

@jonathanpeppers

Copy link
Copy Markdown
Member

Context

After #11636 (dotnet provisioning step removed) and #11731 (test-deps scenarios removed), Context.AutoProvision is false by default everywhere except hand-run dev provisioning, which is no longer in use. The per-OS package lists are populated at OS.Init() time but EnsureDependencies is effectively a no-op:

  • OS.EnsureDependencies() returns early when AutoProvision is false (the default),
  • nothing else in the codebase reads from the Program derivatives' install/uninstall paths,
  • the BuildToolsInventory writer remains driven only from EssentialTools.MacOS.cs (homebrew version detection).

The OS.Init() / InitializeDependencies() / EnsureDependencies() machinery on OS.cs itself is intentionally left in place here — that's a larger refactor for a follow-up PR. This PR only strips the now-vestigial package-list data and the program/runner classes that fed it.

Files deleted (Phase F — macOS, 4 files)

  • Application/HomebrewProgram.MacOS.cs
  • Application/PkgProgram.MacOS.cs
  • ToolRunners/BrewRunner.MacOS.cs
  • ToolRunners/PkgutilRunner.MacOS.cs

Files deleted (Phase G — Linux, 5 files)

  • Application/Program.Linux.cs (LinuxProgram base — orphan after subclasses go)
  • Application/Program.ArchLinux.cs
  • Application/Program.DebianLinux.cs
  • Application/Program.FedoraLinux.cs
  • Application/Program.GentooLinux.cs

Files deleted (Phase 3 — orphan)

  • Application/IBuildInventoryItem.cs (only implementor was HomebrewProgram; BuildToolsInventory itself stays, populated directly by EssentialTools.MacOS.cs).

Files reduced to empty stubs

ConfigAndData/Dependencies/:

  • MacOS.csInitializeDependencies() no-op (was Homebrew formula list + git fallback).
  • Linux.Arch.cs — class kept (referenced by distroMap); package list removed.
  • Linux.Fedora.cs — same.
  • Linux.Gentoo.cs — same.
  • Linux.DebianCommon.cs — common Debian/Ubuntu package list removed; Flavor = "Debian" kept.
  • Linux.UbuntuCommon.cslibtoolPackages + NeedLibtool virtual + InitOS override removed (all dead).
  • Linux.Debian.cs — all per-version package lists (packages, packagesPre10, packagesPreTrixie, packagesTrixieAndLater, packages10AndNewerBuildBots) removed; release/codename detection (EnsureVersionInformation, DebianUnstableVersionMap, IsDebian10OrNewer, etc.) preserved as conservative scope.
  • Linux.Ubuntu.cspreCosmicPackages, cosmicPackages, preDiscoPackages lists + NeedLibtool override removed; UbuntuRelease + EnsureVersionInformation preserved.
  • Linux.Mint.csNeedLibtool override removed (the property is gone from the base).

ConfigAndData/Dependencies/Windows.cs was already a no-op stub — no edit.

Verification

Orphan audit (each git grep -nw <Type> -- 'build-tools/xaprepare/*' reports 0 hits):

  • HomebrewProgram, PkgProgram, BrewRunner, PkgutilRunner
  • ArchLinuxProgram, DebianLinuxProgram, FedoraLinuxProgram, GentooLinuxProgram, LinuxProgram
  • IBuildInventoryItem

Build:

dotnet build build-tools\xaprepare\xaprepare\xaprepare.csproj -c Debug
Build succeeded.  0 Warning(s)  0 Error(s)

Out of scope (follow-up)

  • Removing the abstract OS.InitializeDependencies() declaration and the surrounding EnsureDependencies() machinery from OperatingSystems/OS.cs.
  • VersionFetchers / ProgramVersionParser / RegexProgramVersionParser / SevenZipVersionParser / Extensions.DictionaryOfProgramVersionParser.cs are kept — Utilities.GetProgramVersion still queries them from Program.cs, ToolRunner.cs, EssentialTools.MacOS.cs, and OperatingSystems/MacOS.cs (brew detection).

Precedent

#11568, #11580, #11608, #11613, #11631, #11657, #11658, #11731, #11732, #11733, #11737, #11740, #11760

After #11636 (dotnet provisioning removed) and #11731 (test-deps scenarios

removed), Context.AutoProvision is false by default everywhere, so the per-OS

package lists that fed OS.EnsureDependencies() are never used.

Delete the macOS Homebrew/Pkg program infrastructure and the per-distro Linux

program subclasses, along with their package lists. The OS.Init() /

InitializeDependencies() / EnsureDependencies() machinery in OS.cs is left

intact for a follow-up PR.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 29, 2026 14:16

Copilot AI 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

Removes the now-unused xaprepare per-OS dependency provisioning data and the supporting program/tool-runner classes, leaving the higher-level OS.InitializeDependencies()/EnsureDependencies() plumbing in place for a later refactor.

Changes:

  • Deleted macOS Homebrew/pkg-related Program and ToolRunner implementations that are no longer referenced.
  • Deleted Linux package-manager Program implementations (and the shared LinuxProgram base) that only existed to feed per-distro dependency lists.
  • Stripped per-OS/per-distro dependency package lists down to no-op stubs while preserving distro detection/version parsing logic.

Reviewed changes

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

Show a summary per file
File Description
build-tools/xaprepare/xaprepare/ToolRunners/PkgutilRunner.MacOS.cs Deleted macOS pkgutil tool runner (no longer used).
build-tools/xaprepare/xaprepare/ToolRunners/BrewRunner.MacOS.cs Deleted Homebrew tool runner (no longer used).
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/MacOS.cs Removed Homebrew formula dependency list; InitializeDependencies() now a no-op stub.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.UbuntuCommon.cs Removed libtool-related dependency injection logic.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Ubuntu.cs Removed Ubuntu version-based package lists and dependency initialization.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Mint.cs Removed Mint-specific libtool dependency override.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Gentoo.cs Removed Gentoo package list provisioning; left a minimal stub.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Fedora.cs Removed Fedora package list provisioning; left a minimal stub.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.DebianCommon.cs Removed common Debian/Ubuntu package list provisioning.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Debian.cs Removed Debian package list provisioning while keeping version/codename detection.
build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/Linux.Arch.cs Removed Arch package list provisioning; left a minimal stub.
build-tools/xaprepare/xaprepare/Application/Program.Linux.cs Deleted LinuxProgram base class (orphaned after removing subclasses).
build-tools/xaprepare/xaprepare/Application/Program.ArchLinux.cs Deleted Arch package-manager-backed Program implementation.
build-tools/xaprepare/xaprepare/Application/Program.DebianLinux.cs Deleted Debian package-manager-backed Program implementation.
build-tools/xaprepare/xaprepare/Application/Program.FedoraLinux.cs Deleted Fedora package-manager-backed Program implementation.
build-tools/xaprepare/xaprepare/Application/Program.GentooLinux.cs Deleted Gentoo package-manager-backed Program implementation.
build-tools/xaprepare/xaprepare/Application/PkgProgram.MacOS.cs Deleted macOS .pkg installer-backed Program implementation.
build-tools/xaprepare/xaprepare/Application/HomebrewProgram.MacOS.cs Deleted Homebrew-backed Program implementation (and build inventory hook).
build-tools/xaprepare/xaprepare/Application/IBuildInventoryItem.cs Deleted build-inventory interface (only used by removed Homebrew program).

jonathanpeppers and others added 3 commits June 29, 2026 09:24
Previously installed implicitly via xaprepare's Linux package list when

PREPARE_AUTOPROVISION=1. After removing the per-distro package lists,

public agents need an explicit apt-get install of p7zip-full, matching

the existing 'brew install p7zip' step in build-macos-steps.yaml.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
With the per-OS dependency provisioning gone, AutoProvision /

AutoProvisionUsesSudo are no-ops (the Dependencies list is empty, so

EnsureDependencies short-circuits before reaching any install logic).

Remove the whole chain:

- CI YAMLs: drop PREPARE_AUTOPROVISION=1 (build-linux-steps, build-macos-steps,

  commercial-build, azure-pipelines-apidocs, copilot-setup-steps) and

  -p:AutoProvision=true (build-windows-steps).

- Makefile: drop PREPARE_AUTOPROVISION knob, --auto-provision args, and the

  now-unused NO_SUDO export / --auto-provisioning-uses-sudo arg.

- xaprepare: drop AutoProvision / AutoProvisionUsesSudo from Context,

  KnownProperties, Properties.Defaults, xaprepare.targets, and the

  --auto-provision / --auto-provision-uses-sudo CLI options in Main.cs.

- OS.cs: simplify EnsureDependencies to just report missing programs;

  the install branch is unreachable now.

- Unix.cs: stop exporting NO_SUDO env var.

- Configuration.props: drop AutoProvision / AutoProvisionUsesSudo defaults.

- Docs: update Documentation/building/{configuration,unix/dependencies}.md and

  build-tools/xaprepare/README.md to drop AutoProvision guidance and point

  users at their platform's package manager.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Previously installed implicitly via xaprepare's Homebrew/apt package lists

before PREPARE_AUTOPROVISION was removed. Extend the public-agent install

step on both Linux and macOS to cover the build tools the old per-OS

Dependencies lists used to provision.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jonathanpeppers jonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jun 30, 2026
@simonrozsival simonrozsival merged commit e89fded into main Jun 30, 2026
40 checks passed
@simonrozsival simonrozsival deleted the jonathanpeppers-remove-os-dep-provisioning branch June 30, 2026 04:22
jonathanpeppers added a commit that referenced this pull request Jul 1, 2026
…11826)

## Summary

Moves `XABuildConfig.cs` generation out of `xaprepare` and into a new strong-named class library at `src/AndroidBuildConfig/AndroidBuildConfig.csproj` that produces `AndroidBuildConfig.dll`.

This continues the incremental removal of `xaprepare`, following the precedent set by `cmake-config.csproj` (#11760) and the recent batch #11568, #11580, #11608, #11613, #11631, #11731, #11732, #11733, #11737, #11740, #11803, #11821, #11825.

It also fixes a long-standing wart: previously `XABuildConfig.cs` was `<Compile Include>`'d into three different assemblies (`Xamarin.Android.Build.Tasks`, `Xamarin.ProjectTools`, and `Xamarin.Android.Build.Tests`), so every test that mentioned `XABuildConfig` produced a `CS0436` "type conflicts with imported type" warning — about **22** of them.

Wrapping the type in its own assembly collapses it to a single definition that every consumer references normally. After this change `Xamarin.Android.Build.Tests` builds with **7** warnings (none for `XABuildConfig`).

## How it works

`src/AndroidBuildConfig/AndroidBuildConfig.csproj`:

- `Microsoft.NET.Sdk` / `netstandard2.0`, strong-named with `product.snk`.
- `ProjectReference`s `Xamarin.Android.Tools.AndroidSdk` (for the `AndroidTargetArch` enum used by the template).
- `<UsingTask>`s `ReplaceFileContents`, `GitCommitHash`, and `GitBranch` from `$(PrepTasksAssembly)`, all with `TaskFactory="TaskHostFactory" Runtime="NET"` per repo convention.
- The `_GenerateXABuildConfig` target runs `BeforeTargets="BeforeCompile;CoreCompile"`, computes every substitution from MSBuild properties already exposed by `Configuration.props` (NDK major/minor/micro via `$(_XAAndroidNdkPkgRevision.Split('.'))`, API levels via `Split`/`Contains`, full commit hash via `GitCommitHash.CommitHash`, branch via `GitBranch.Branch`), and writes the file to `$(IntermediateOutputPath)XABuildConfig.cs`. The `<Compile Include>` lives inside the target so it resolves at execution time, when `IntermediateOutputPath` is final.
- `XABuildConfig` is now `public static class` instead of `internal static class`.

The three consumer csprojs lose their `<Compile Include="…XABuildConfig.cs" />` and now have a normal `<ProjectReference Include="…AndroidBuildConfig.csproj" />` (no `ReferenceOutputAssembly="False"`).

`build-tools/installers/create-installers.targets` ships `AndroidBuildConfig.dll` + `.pdb` alongside `Xamarin.Android.Build.Tasks.dll`.

## xaprepare cleanup

Removed dead code that only existed to feed the old `Get_XABuildConfig_cs` step:

- `Step_GenerateFiles.Get_XABuildConfig_cs` and its `GetMajor` / `GetMinor` locals
- `BuildInfo`: `NDKRevision`, `NDKVersionMajor`, `NDKVersionMinor`, `NDKVersionMicro`, `NDKVersion`, `XACommitHash`, `XABranch`, `GatherGitInfo`, `DetermineXACommitInfo`, `cachedNdkVersion`
- `Context`: the `if (SelectedScenario.NeedsGitBuildInfo) { await BuildInfo.GatherGitInfo … }` block
- `Scenario.NeedsGitBuildInfo` (and the `NeedsGitBuildInfo = true;` setters in `Scenario_Standard` and `Scenario_Required`)
- `BuildAndroidPlatforms.cs` — entire file (only contained constants used by the deleted code)
- `Utilities.ParseAndroidPkgRevision`
- `GitRunner.GetTopCommitHash` and `GitRunner.GetBranchName` (class retained — still used by `BuildInfo.DetermineLastVersionChangeCommit`)

## Files

**Added**
- `src/AndroidBuildConfig/AndroidBuildConfig.csproj`

**Renamed/moved**
- `build-tools/scripts/XABuildConfig.cs.in` → `src/AndroidBuildConfig/XABuildConfig.cs.in` (`static class` → `public static class`)

**Modified**
- `src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj`
- `src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Xamarin.ProjectTools.csproj`
- `src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj`
- `build-tools/installers/create-installers.targets`
- `build-tools/xaprepare/xaprepare/Steps/Step_GenerateFiles.cs`
- `build-tools/xaprepare/xaprepare/Application/BuildInfo.cs`
- `build-tools/xaprepare/xaprepare/Application/Context.cs`
- `build-tools/xaprepare/xaprepare/Application/Scenario.cs`
- `build-tools/xaprepare/xaprepare/Application/Utilities.cs`
- `build-tools/xaprepare/xaprepare/Scenarios/Scenario_Standard.cs`
- `build-tools/xaprepare/xaprepare/Scenarios/Scenario_Required.cs`
- `build-tools/xaprepare/xaprepare/ToolRunners/GitRunner.cs`
- `build-tools/xaprepare/README.md`

**Deleted**
- `build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs`

## Verification

- `AndroidBuildConfig.csproj`: 0 warnings, 0 errors.
- `Xamarin.Android.Build.Tasks.csproj`: 0 errors, 85 pre-existing unrelated warnings (none for `XABuildConfig`).
- `Xamarin.Android.Build.Tests.csproj`: 0 errors, **7** warnings — down from ~22; all `CS0436 XABuildConfig` conflicts eliminated.
- `xaprepare.csproj`: 0 warnings, 0 errors.
- Generated `XABuildConfig.cs` is semantically identical to the pre-change xaprepare output. The only token difference is the intentional `static class` → `public static class`; everything else (NDK split, API-level major/minor split, supported-ABIs semicolon list, full commit hash, branch name, etc.) matches the previous baseline byte-for-byte.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
jonathanpeppers added a commit that referenced this pull request Jul 1, 2026
…11825)

Continues the incremental removal of `xaprepare` by moving the
`cgmanifest.json` generator out of the C# step
`Step_GenerateCGManifest` and into a YAML `pwsh:` step that runs only
on CI.

The file is consumed exclusively by the Azure DevOps Component
Governance Detection task (auto-injected on internal pipelines by
`eng/common/core-templates/job/job.yml`). It is not consumed by any
in-repo build target, so generating it from the C# Prepare step is no
longer necessary.

We cannot drop the file outright: `eng/common` ships CG infrastructure
but it is not yet wired to auto-discover submodules in our pipelines,
so the explicit `cgmanifest.json` is still the source of truth.

Files:
* Added: `build-tools/automation/yaml-templates/generate-cgmanifest.yaml`
* Modified: `build-windows-steps.yaml`, `build-macos-steps.yaml`,
  `build-linux-steps.yaml`, `commercial-build.yaml` (call the new
  template after the Prepare/`make jenkins` step)
* Modified: `Scenario_Standard.cs` (drop registration)
* Modified: `GitRunner.cs` (remove now-unused `ConfigList` and
  `SubmoduleStatus` methods)
* Deleted: `Step_GenerateCGManifest.cs`

Verification: byte-for-byte diff of the YAML-generated
`cgmanifest.json` against the previous C# output on Debug:

    Baseline=3144 New=3144
    Total byte differences: 0

Precedent PRs in this stream: #11568, #11580, #11608, #11613,
#11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803,
#11821.

### Simplify generate-cgmanifest.yaml using ConvertTo-Json

Replace the hand-rolled StringBuilder JSON emission with PowerShell's
`ConvertTo-Json`. The output is no longer byte-identical to the
previous C# output (2-space indent instead of 4, and slightly
different whitespace), but it is still valid JSON matching the
component-detection-manifest schema. The Azure DevOps Component
Governance Detection task parses the file, so formatting does not
matter.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
jonathanpeppers added a commit that referenced this pull request Jul 1, 2026
On Windows, xaprepare's Step_GenerateFiles.Windows.cs writes
external/Java.Interop/bin/Build$(Configuration)/JdkInfo.props from
build-tools/xaprepare/xaprepare/Resources/JdkInfo.Windows.props.in.

But this file is immediately overwritten. The PrepareWindows.targets
Prepare flow runs, in order:

  1. `dotnet xaprepare -a` — writes JdkInfo.props (this code).
  2. `MSBuild Xamarin.Android.BootstrapTasks.sln` — does not read JdkInfo.props.
  3. `MSBuild src/workloads/workloads.csproj` — does not read JdkInfo.props.
  4. `CallTarget PrepareJavaInterop` → `dotnet build -t:Prepare Java.Interop.sln`
     → external/Java.Interop/build-tools/scripts/Prepare.targets → runs the
     `JdkInfo` MSBuild task → overwrites JdkInfo.props with its own generated
     content.

Nothing between step 1 and step 4 reads the file, and Java.Interop's Prepare
always regenerates it. Now that external/Java.Interop is in-tree, we can
safely delete the redundant write.

This is the smallest-diff removal:

  * Delete Step_GenerateFiles.Windows.cs (the AddOSSpecificSteps partial).
  * Delete Resources/JdkInfo.Windows.props.in.
  * In Step_GenerateFiles.cs, drop the `partial void AddOSSpecificSteps`
    declaration and collapse GetFilesToGenerate so `atBuildStart == false`
    returns null. Ctor surface (atBuildStart, onlyRequired) is unchanged so
    Scenario_Required.cs is unaffected.
  * In Scenario_Standard.cs, remove the AddEndSteps override — the only
    thing it did was schedule the now-empty Step_GenerateFiles(atBuildStart:
    false).

Preserved (future slices will address these):
  * Get_Configuration_OperatingSystem_props (D1).
  * OperatingSystems/*.cs and Context.OS.* surface.
  * PrepareWindows.targets, DotNet.targets, Java.Interop's Prepare.targets.

Verification:

  * dotnet build build-tools/xaprepare/xaprepare/xaprepare.csproj -c Debug
    → Build succeeded. 0 Warning(s). 0 Error(s).
  * build.cmd -t:Prepare -c Debug (Windows, cold tree) → succeeds; the file
    external/Java.Interop/bin/BuildDebug/JdkInfo.props exists.
  * Compare-Object of the resulting JdkInfo.props before vs after this
    change → byte-identical (1493 bytes, SHA256
    DE59A8061B7657831788FFED7BC1DEECA442E9181605083A4553DE7AC8C003A1),
    confirming Java.Interop's overwrite is what always ends up on disk.
  * Grep audit under build-tools/xaprepare/: no remaining references to
    Step_GenerateFiles.Windows, JdkInfo.Windows.props.in, or
    AddOSSpecificSteps.

Follows previous xaprepare deletion slices #11568, #11580, #11608, #11613,
#11631, #11731, #11732, #11733, #11737, #11740, #11760, #11803, #11821,
#11825, #11826.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants