[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@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

[build] Streamline BootstrapTasks and Prepare orchestration - #12061

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare
Jul 16, 2026
Merged

[build] Streamline BootstrapTasks and Prepare orchestration#12061
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-streamline-bootstrap-prepare

Conversation

@jonathanpeppers

@jonathanpeppersjonathanpeppers commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • delete the unused Android, Emulator, and legacy JdkInfo BootstrapTasks
  • move the one surviving trace logger adapter into CheckApiCompatibility
  • remove BootstrapTasks' Xamarin.Android.Tools.AndroidSdk dependency by parsing the three API metadata fields used by GenerateSupportedPlatforms directly
  • delete the redundant Xamarin.Android.BootstrapTasks.sln and build BootstrapTasks directly in CI
  • make build-tools/scripts/Prepare.proj the cross-platform source of truth for post-install Prepare orchestration
  • delete PrepareWindows.targets by moving its Windows-only .NET installation and toolchain-path guard into Prepare.proj

This follows the wholesale xaprepare removal in #11959.

BootstrapTasks cleanup

The deleted Android and Emulator wrappers had no task registration or invocation. The deleted JdkInfo task was superseded by Java.Interop.BootstrapTasks.JdkInfo; its only remaining indirect use was a generic logger callback used by CheckApiCompatibility.

The initial dependency audit also surfaced a narrow surviving use of AndroidVersion and AndroidVersions in GenerateSupportedPlatforms. That task only needed VersionCodeFull, target-framework version ordering, and Stable, so it now parses those existing item metadata values directly while preserving the prior max-stable and supported-platform ordering semantics. This removes the broader Xamarin.Android.Tools.AndroidSdk project reference without duplicating its model.

Xamarin.Android.BootstrapTasks.sln only contained BootstrapTasks and xa-prep-tasks, which is already a BootstrapTasks project reference. Its Makefile, Windows, and Azure Pipelines consumers now use the project/common orchestrator directly.

Prepare orchestration

BeforeAfter
Unix Makefile listed four commandsUnix installs .NET, then invokes Prepare.proj once
PrepareWindows.targets installed .NET and listed the same four operationsThe solution imports Prepare.proj, which installs .NET and checks the toolchain path on Windows
Java.Interop was called separately by each wrapperPrepare.proj imports DotNet.targets and calls the existing PrepareJavaInterop target

Prepare.proj preserves this order:

  1. restore/build BootstrapTasks
  2. restore/build workloads
  3. run PrepareJavaInterop and its PrepareOpenJDK dependency
  4. build the build-tools inventory

The Unix wrapper launches the orchestrator with system dotnet; imported DotNet.targets continues to use the repo-local $(DotNetPreviewTool) for Java.Interop.
On Windows, Prepare.proj also owns the conditional .NET installation and Android toolchain path guard previously kept in PrepareWindows.targets.

Verification

  • dotnet build build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj -c Debug: passed, 0 warnings
  • build.cmd -t:Prepare -c Debug: passed end to end
  • expected outputs confirmed:
    • bin\BuildDebug\net10.0\Xamarin.Android.Tools.BootstrapTasks.dll
    • external\Java.Interop\bin\BuildDebug\JdkInfo.props
    • bin\BuildDebug\buildtoolsinventory.csv
  • system-dotnet invocation of Prepare.proj: passed, 0 warnings; binlog inspected with binlogtool
  • dotnet-local.cmd build src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj -c Debug: passed with 17 pre-existing generated-code/Javac warnings
  • old solution/task/orchestration references: no matches
  • GNU make was unavailable on the Windows host; the equivalent system-dotnet command emitted by SYSTEM_DOTNET_BINLOG was run directly instead

Delta

11 files changed, 57 insertions, 299 deletions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
CopilotAI review requested due to automatic review settings July 13, 2026 20:48
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4

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 simplifies the repository’s build bootstrap and “prepare” flow by removing legacy/unreferenced BootstrapTasks, trimming BootstrapTasks dependencies, and centralizing post-install orchestration into a single cross-platform MSBuild entrypoint (build-tools/scripts/Prepare.proj). This aligns with the earlier xaprepare removal and reduces duplication between Unix/Windows/CI prepare paths.

Changes:

  • Removed unused BootstrapTasks wrappers (Android, Emulator) and the legacy JdkInfo task; moved the remaining trace logger adapter into CheckApiCompatibility.
  • Updated GenerateSupportedPlatforms to stop depending on Xamarin.Android.Tools.AndroidSdk by parsing the required @(AndroidApiInfo) metadata directly.
  • Consolidated Prepare orchestration so Makefile, Windows targets, and CI build BootstrapTasks from the .csproj and invoke Prepare.proj as the single source of truth.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
Xamarin.Android.BootstrapTasks.slnDeleted redundant solution previously used for BootstrapTasks build orchestration.
MakefileSimplified prepare to a single invocation of build-tools/scripts/Prepare.proj.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/JdkInfo.csRemoved superseded BootstrapTasks JdkInfo implementation.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GenerateSupportedPlatforms.csRemoved AndroidSdk model dependency; now parses the needed metadata directly.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Emulator.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/CheckApiCompatibility.csInlined the logger adapter previously sourced from the removed JdkInfo.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/Android.csDeleted unused wrapper task.
build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csprojDropped project reference to Xamarin.Android.Tools.AndroidSdk.
build-tools/scripts/PrepareWindows.targetsRepointed Windows prepare to run the new Prepare.proj orchestrator.
build-tools/scripts/Prepare.projNew cross-platform MSBuild “Prepare” orchestrator for BootstrapTasks/workloads/Java.Interop/inventory.
build-tools/automation/azure-pipelines.yamlUpdated CI BootstrapTasks build step to build the .csproj instead of the deleted .sln.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
jonathanpeppersand others added 2 commits July 14, 2026 10:43
Co-authored-by: Šimon Rozsíval <simon@rozsival.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 813d3d45-07e0-428e-83db-2ddec4e6fbd4
@jonathanpeppersjonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Jul 16, 2026
@jonathanpeppers
jonathanpeppers enabled auto-merge (squash) July 16, 2026 13:43
@jonathanpeppers
jonathanpeppers merged commit 94e4833 into mainJul 16, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-streamline-bootstrap-prepare branch July 16, 2026 16:32
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 16, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ready-to-reviewThis 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

@jonathanpeppers@simonrozsival