Skip to content

[mobile] .NET 11 mobile runtime configuration updates#35878

Open
kotlarmilos wants to merge 8 commits into
net11.0from
dev/update-sdk-mobile
Open

[mobile] .NET 11 mobile runtime configuration updates#35878
kotlarmilos wants to merge 8 commits into
net11.0from
dev/update-sdk-mobile

Conversation

@kotlarmilos

@kotlarmilos kotlarmilos commented Jun 11, 2026

Copy link
Copy Markdown
Member

Description

Remove the Mono mobile device-tests, ui-tests, and PR Mono legs in eng/pipelines/ci.yml, arcade/stage-device-tests.yml, common/device-tests.yml, and common/ui-tests.yml.

Validation pipelines (must pass): dnceng/internal dotnet-maui 1536 (build), 1561 (ui-tests), 1562 (device-tests).

Validation pins (temporary): pinned to .NET 11 test build 11.0.100-preview.6.26310.106 (AzDO dotnet-unified-build run 2996804, BAR 318158, source dotnet/dotnet@8d5d82abe13, branch dev/update-sdk-mobile-stage2) and the public general-testing NuGet feed, so CI exercises the SDK with the Mono mobile workloads and RIDs removed.

TODO before merge: revert the global.json / Version.Details.xml / Versions.props pins and the NuGet.config feed back to the official VMR versions and the main feed.

kotlarmilos and others added 3 commits June 11, 2026 13:51
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35878

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35878"

@github-actions github-actions Bot added the area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions label Jun 11, 2026
@kubaflo

kubaflo commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

AI code review refresh for net11.0 target

Head reviewed: d1b7ae5272d600de99d241c248c0f213df9fb19d (draft; base net11.0)
Note: the fleet scan referenced 9323f80b…; the actual current head is d1b7ae52…. This review reflects the actual head.

Verdict: ⚠️ Needs changes (blocked on CI)

Mechanically the change is a routine, low-risk SDK roll plus an intentional pipeline consolidation — but CI cannot bootstrap, and a couple of items should be confirmed before merge.

What the PR does

  1. SDK roll preview.5 → preview.6 (11.0.100-preview.5.26256.10511.0.100-preview.6.26310.106, Arcade/Helix beta.26256.105beta.26310.106). Purely mechanical, identical-version edits across global.json, eng/Versions.props, and eng/Version.Details.xml. Property/SHA pairs are consistent.
  2. NuGet.config: adds the general-testing validation feed and removes the darc-pub-dotnet-dotnet-e17b0d0 dependency-flow source.
  3. Pipeline consolidation (Mono → CoreCLR): removes the Mono device-test stages (stage-device-tests.yml), the Mono device-test job templates (device-tests.yml), and the Mono UI-test stages plus mac_runandroid_tests / Mono RunOniOS lanes (ui-tests.yml, ci.yml), keeping the CoreCLR and NativeAOT variants. The now-unused AndroidPoolLinux parameter is removed cleanly (no residual references at head — verified).

CI status (build 1459770, maui-pr)

🔴 Failing — 9 fail / 7 pass / 1 skip. This is not infra flake and not a known issue; it is directly caused by the SDK roll:

  • Every build leg (macOS Debug/Release, Windows Debug/Release, Pack macOS, Helix Unit Tests) dies in Provision SDK & Build BuildTasks.
  • The validation feed itself works (Microsoft.DotNet.Arcade.Sdk 11.0.0-beta.26310.106 installed from general-testing).
  • Root cause: the freshly-provisioned .dotnet/dotnet (preview.6) crashes during dotnet restore of Workloads.csproj with exit code 134 (SIGABRT)DotNet.csproj(234,5): error MSB3073 … exited with code 134. The new SDK build aborts before any MAUI code is compiled.

This must go green before merge. The crash suggests either the preview.6 SDK build is not yet fully flowed/usable on these hosts or a workload-restore incompatibility — re-roll once a healthy build is available.

Prior review reconciliation

No prior copilot-cli-net11-fleet-review markers, no human PR reviews, and no prior ❌ findings on any surface — nothing to reconcile. Only an automated dogfood comment exists. This is the first fleet review (round 18).

Blast radius / failure-mode probing

  • Global build/startup: the SDK roll touches the bootstrap SDK for the entire repo; the SIGABRT proves the blast radius is total right now (nothing builds).
  • Test coverage reduction: beyond the Mono→CoreCLR switch, a few lanes are dropped with no visible CoreCLR replacement in the diff: RunOnAndroid (ci.yml), mac_ui_tests (macOS Catalyst UI), and the Material3 build/test stages. Please confirm this coverage loss is intended (CoreCLR-only mobile for .NET 11) and not accidental.
  • Trimming/AOT/NativeAOT: NativeAOT iOS lanes are preserved; no trimming-default or runtime-config-semantics changes in product code — this PR is infra/versions only, so no app-facing back-compat risk.
  • NuGet.config: relying on the temporary general-testing validation feed and dropping the darc-pub-dotnet-dotnet source is fine for validation but should be reverted to normal dependency-flow sources before merge so released builds don't depend on a validation feed.

Concise findings

  • ❌ CI red — new preview.6 SDK aborts (exit 134) on workload restore; blocking.
  • ⚠️ Confirm intended removal of RunOnAndroid, macOS Catalyst UI, and Material3 lanes (no CoreCLR equivalent in diff).
  • ⚠️ Revert validation-feed NuGet.config change before merge.
  • ✅ Version bumps are internally consistent; AndroidPoolLinux removal is clean.

Confidence: High on the CI root cause and the mechanical-bump assessment; Medium on the test-coverage intent (depends on the team's CoreCLR-only mobile plan for net11).


This is an automated, non-binding AI review for the net11.0 fleet refresh. It is not an approval and does not request changes via GitHub review state — a human maintainer should make the merge decision.

@kotlarmilos kotlarmilos marked this pull request as ready for review June 12, 2026 10:10
The shared UI-test and device-test templates defaulted to the Mono
runtime, so any caller that omitted the runtime parameter would build
and run against Mono. Flip the defaults to CoreCLR and make the Windows
UI-test call sites explicit so no lane resolves the mobile Mono runtime
packs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kotlarmilos kotlarmilos self-assigned this Jun 12, 2026
@kotlarmilos

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@kubaflo

kubaflo commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

AI code review refresh for net11.0 target

Head reviewed: c755da050b1ce1fed079142f5675e6ffae26ac2d (base net11.0)

Verdict: 🚫 Blocked/limited — CI cannot bootstrap

Mechanically this remains a clean, low-risk SDK roll + an intentional pipeline default switch. But CI is still fully red at provisioning, so the change cannot be validated and is not mergeable yet. The blocker is upstream (preview.6 SDK/feed), not caused by this PR's diff.

What changed since round 18 (d1b7ae52…c755da05…)

One new commit, "[mobile] Default UI and device test pipelines to CoreCLR", config-only:

  • device-tests-jobs.yml / device-tests-steps.yml: useCoreClr default false → true.
  • ui-tests-build-sample.yml / ui-tests-steps.yml: runtimeVariant default Mono → CoreCLR.
  • ui-tests.yml: Windows build-sample and WinUI test lanes now explicitly pass runtimeVariant: "CoreCLR".

This flips the default runtime exercised across mobile device/UI test lanes to CoreCLR for .NET 11. Parameter edits are consistent and the # Mono, CoreCLR, NativeAOT comments are preserved. No product/runtime-config-semantics code touched — no app-facing back-compat or trimming/AOT default changes.

The rest of the PR is unchanged from round 18: preview.5 → preview.6 SDK roll (11.0.100-preview.6.26310.106, Arcade/Helix beta.26310.106), internally consistent across global.json, eng/Versions.props, eng/Version.Details.xml (verified version/SHA pairs); plus the NuGet.config validation-feed swap.

CI status (required checks all 🔴)

Check Build Result
maui-pr 1461103 fail
maui-pr-devicetests 1461105 fail
maui-pr-uitests 1461104 fail

Every leg dies in 🛠️ Provision SDK & Build BuildTasks before any MAUI code compiles. Two distinct upstream root causes (clearer than round 18, both preview.6-side):

  1. macOS legs — SIGABRT NOT resolved. Provisioned .dotnet/dotnet still aborts (exit 134 / Abort trap: 6) during Workloads.csproj restore. New detail: the NativeAOT host fails dlopen of a mis-named liblibSystem.Security.Cryptography.Native.Apple (double lib prefix) — a preview.6 macOS host bug, not in this PR.
  2. Windows legs — missing workload manifests. NU1101: Unable to find package Microsoft.NET.Sdk.macOS.Manifest-11.0.100-preview.6 (and …tvOS.Manifest…). The preview.6 iOS/macOS/tvOS workload manifest packages aren't yet in any configured feed (incl. general-testing).

Both are infra/upstream availability problems, not introduced by the diff. Re-roll once a healthy preview.6 build flows and the workload manifests are published.

Prior review reconciliation (round 18)

  • CI red, preview.6 SDK aborts on workload restore (exit 134)still failing; NOT resolved. Same SIGABRT on macOS, now pinpointed to the mis-named crypto native lib dlopen; additionally Windows now fails with NU1101 missing manifests.
  • ⚠️ Confirm Mono→CoreCLR coverage intent → partially addressed: the new commit explicitly defaults lanes to CoreCLR rather than dropping coverage; still worth a maintainer confirmation that CoreCLR-only mobile is the intended net11 posture.
  • ⚠️ Revert validation-feed NuGet.config change before merge → unchanged; general-testing still added and darc-pub-dotnet-dotnet still removed. Should return to normal dependency-flow sources before merge.
  • Version bumps internally consistent → re-verified for preview.6.

Blast radius / failure-mode probing

  • Bootstrap SDK roll = total blast radius — the SIGABRT/NU1101 prove nothing in the repo builds right now.
  • Pipeline default flip changes which runtime CI exercises across all mobile device/UI lanes (Mono→CoreCLR) — meaningful test-surface shift, but config-only, reversible, and matches the PR intent.
  • No trimming/AOT/NativeAOT default or runtime-config semantics changes in product code; NativeAOT iOS lanes remain available.

Findings

  • 🚫 CI fully blocked at provisioning (macOS SIGABRT exit 134; Windows NU1101 missing preview.6 workload manifests). Upstream, not the diff. Blocking.
  • ⚠️ Revert validation-feed NuGet.config before merge.
  • ⚠️ Confirm CoreCLR-default is the intended net11 mobile posture.
  • ✅ SDK version bumps consistent; CoreCLR pipeline default switch is clean and config-only.

Confidence: High on the CI root causes and the mechanical/clean nature of the diff; Medium on the CoreCLR-only intent (depends on the team's net11 mobile runtime plan).


This is an automated, non-binding AI review for the net11.0 fleet refresh. It is not an approval and does not request changes via GitHub review state — a human maintainer should make the merge decision.

@kubaflo kubaflo 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.

PR #35878 — Review Synthesis

Verdict: NEEDS_CHANGES (confidence: high)

This is a mechanically clean .NET 11 SDK roll (preview.5.26256.105preview.6.26310.106, Arcade/Helix beta.26310.106) plus an intentional Mono→CoreCLR pipeline default switch; version/SHA pairs are internally consistent across global.json, eng/Versions.props, and eng/Version.Details.xml (all map to dotnet/dotnet@8d5d82abe13). It is not mergeable as-is because the PR carries self-acknowledged temporary validation pins and all required checks are red. Changes are required before merge (revert the pins), so NEEDS_CHANGES is the right call over opus-4.6's NEEDS_DISCUSSION.

Key findings

  • Temporary validation pins must be reverted before merge (merge gate). The general-testing feed in NuGet.config:7 (with darc-pub-dotnet-dotnet removed) and the preview.6 version pins in global.json:3 / eng/Versions.props / eng/Version.Details.xml are validation-only. The PR body already states this as a TODO and it is covered in discussion rounds 18 & 19 — captured here as the blocker, not re-posted inline to avoid duplication.
  • Orphaned Material3 plumbing (inline, ui-tests.yml:104 — non-blocking cleanup). After the Material3 build/test stages were deleted, the # Material3 Build Stage comment (line 104) now precedes the unrelated android_ui_tests_coreclr stage; the androidApiLevelsExtended parameter (line 9) has no remaining consumer; and the note at line 20 is stale. This is the one genuinely new, code-confirmed item (caught by opus-4.8 + opus-4.6, missed by the others).
  • Confirm coverage-loss is intentional (already raised). Material3, RunOnAndroid, and macOS Catalyst UI lanes are dropped with no CoreCLR replacement. Already flagged for maintainer confirmation in the discussion; not re-posted inline.
  • Clean / validated: AndroidPoolLinux removal has no residual references; the runtimeVariant: "CoreCLR" / useCoreClr: true default flips are consistent; no error-level defect in the diff itself. The added explicit runtimeVariant: "CoreCLR" (line 101) is harmless belt-and-suspenders — dropped as a non-issue.

CI

All required checks FAILING — maui-pr (1461103), maui-pr-devicetests (1461105), maui-pr-uitests (1461104) — every leg dies in Provision SDK on upstream preview.6 problems (macOS SIGABRT/exit 134; Windows NU1101 missing preview.6 workload manifests). Not caused by this diff; must go green before merge.

Comment thread eng/pipelines/common/ui-tests.yml Outdated
Restore global.json, NuGet.config, eng/Versions.props and
eng/Version.Details.xml to the net11.0 base so CI bootstraps with the
repo normal SDK. The validation pin to the preview.6 test build was only
for local validation and did not boot on the CI hosts. The mobile test
pipeline changes remain.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kubaflo

kubaflo commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Re-review PR #35878 — pipelines default to CoreCLR (new head 7121e9f)

Verdict: NEEDS_DISCUSSION (confidence: medium) — effectively LGTM pending CI. ⬆️ Upgraded from the prior NEEDS_CHANGES: the temporary-pin merge gate is resolved.

What changed since last review

The blocking concern last round was the temporary validation SDK pin + general-testing NuGet feed. Commit 7121e9f "Revert validation SDK pin and feed to net11.0" reverts those — the PR no longer touches global.json / NuGet.config / Version.Details.xml / Versions.props. It is now only 8 pipeline YAML files defaulting the UI/device-test pipelines to CoreCLR. 3 of 4 models now return LGTM; the substantive Mono→CoreCLR consolidation is sound (no dangling dependsOn, runtimeVariant/useCoreClr defaults flipped consistently, surviving CoreCLR callers pass useCoreClr: true explicitly).

Remaining (optional, cosmetic — not blocking)

  • The orphaned # Material3 Build Stage comment in eng/pipelines/common/ui-tests.yml (already flagged inline last round) is still present; the now-defined-but-unconsumed androidApiLevelsExtended parameter could be removed alongside it. Pure cleanup.

Dropped (false positives)

A model suggested removing the useMaterial3 parameter from ui-tests-build-sample.yml / ui-tests-steps.yml as "unused." Dropped: git grep at this head shows useMaterial3 is still actively referenced in those templates' stage condition: expressions (e.g. eq('${{ parameters.useMaterial3 }}', 'false')) — removing it would break the templates.

CI

A fresh build (1464868) is pending on this head — not failing. Since this PR modifies the pipelines themselves, the only remaining gate is confirming that build goes green. No code changes requested.

Multi-model review (gpt-5.5 · opus-4.8 · opus-4.6 · gemini-3.1-pro). Comments only — not a formal approval.

Surface the unsupported Mono mobile runtime build error directly in the
workload to validate that no Mono mobile build paths remain in CI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kubaflo

kubaflo commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Re-review PR #35878 — pipelines default to CoreCLR (new head 4bfa7fb)

Verdict: NEEDS_DISCUSSION (confidence: medium) — effectively LGTM pending CI. 2 of 4 models LGTM (gpt-5.5, opus-4.6); the remaining two flag only cleanup + one intent question (addressed below). No new inline comments — the one open code item (orphaned Material3 comment) was already posted last round.

Since last review

The new commit 4bfa7fb "Temporarily error when building with the Mono mobile runtime" adds a 6-line _ErrorOnMonoMobileRuntime target to Directory.Build.targets that raises NETSDK1242 when UseMonoRuntime == true on Android/iOS/tvOS/MacCatalyst. The previously-blocking temporary SDK pins + feed remain reverted (resolved last round).

One question for the author (not a blocker)

One model read the new Mono-error target as a "temporary CI-validation gate that must be reverted before merge." I don't think that's required: the target is not in the PR description's explicit "TODO before merge: revert …" list (which covers only the global.json / Version.Details / Versions.props pins + NuGet.config feed — already reverted), and the error text ("Building Mono mobile projects is not supported in .NET 11.0 and later. Use the .NET 10.0 SDK to build this project.") reads as an intentional, permanent net11 guard that matches the PR's stated purpose of removing the Mono mobile legs. The only friction is the commit message word "Temporarily," which is slightly contradictory. Please confirm _ErrorOnMonoMobileRuntime is meant to ship (and, if so, that reusing the SDK-reserved NETSDK1242 code here is intended).

Remaining cleanup (already flagged inline last round — not reposted)

The orphaned # Material3 Build Stage comment in eng/pipelines/common/ui-tests.yml:104 and the now-unused androidApiLevelsExtended parameter can be removed. Pure cleanup.

CI

A fresh build is pending on this head — not failing. Since this PR only touches pipelines/build targets, confirming that build goes green (and the Mono-guard intent above) is the remaining gate.

Multi-model review (gpt-5.5 · opus-4.8 · opus-4.6 · gemini-3.1-pro). Comments only — not a formal approval.

@kotlarmilos

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

The Material3 build and test stages were removed, leaving dead
plumbing in ui-tests.yml: a stale "Material3 Build Stage" comment
above the unrelated android_ui_tests_coreclr stage, the now-unused
androidApiLevelsExtended parameter, and a note pointing at stages
that no longer exist. Remove them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kotlarmilos

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

The NETSDK1242 error for the Mono mobile runtime is emitted by the platform
SDKs (Android and Apple) that MAUI apps build on top of. The guard in MAUI's
Directory.Build.targets only affected this repository's own build through the
internal _MauiTargetPlatformIs* properties, so it was redundant and did not
surface to consumers. Remove it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kotlarmilos

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@kubaflo

kubaflo commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

✅ LGTM — no blocking issues found

Re-review PR #35878 — default mobile test pipelines to CoreCLR (new head 25b40427)

Verdict: LGTM (confidence: high) — all previously-raised items are now resolved. 🎉

Everything flagged is addressed

  1. Temporary SDK pins + feed — reverted (earlier commit). ✅
  2. _ErrorOnMonoMobileRuntime target — this push removes it, confirming it was the temporary CI-validation gate (thanks for clarifying my earlier question). Directory.Build.targets is back to baseline. ✅
  3. Orphaned Material3 leftovers — removed the unused androidApiLevelsExtended parameter, deleted the stale # Material3 Build Stage comment, and corrected the line-20 note. The earlier inline cleanup comment is fully resolved. ✅

Assessment

What remains is the clean, intended change: the Mono→CoreCLR consolidation of the UI/device-test pipelines (removing the Mono mobile legs, defaulting runtimeVariant/useCoreClr). No dangling stage dependsOn, surviving CoreCLR callers pass useCoreClr: true explicitly, and useMaterial3 remains where it's still referenced. No code/config concerns remain.

CI

A fresh maui-pr build (1466190) is pending on this head. Since this PR is the pipeline definition, the only remaining gate is confirming that build goes green — recommend a quick check of the new CoreCLR legs before merge. No changes requested.

Multi-model review (gpt-5.5 · opus-4.8 · opus-4.6 · gemini-3.1-pro). Comments only — not a formal approval.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants