Skip to content

ci: repair release/stable/9.0 build against current SDKs & runner images#3408

Open
dansiegel wants to merge 4 commits into
release/stable/9.0from
claude/release-9-0-build-fix-5acca1
Open

ci: repair release/stable/9.0 build against current SDKs & runner images#3408
dansiegel wants to merge 4 commits into
release/stable/9.0from
claude/release-9-0-build-fix-5acca1

Conversation

@dansiegel

@dansiegel dansiegel commented Jul 10, 2026

Copy link
Copy Markdown
Member

Summary

Pushing the #3405 navigation backport (#3407) triggered the first full Prism CI run on release/stable/9.0 in a long time, and it failed across all five build jobs. None of the failures are caused by the backported code — they are accumulated toolchain/runner drift that this run was simply the first to surface. master is unaffected because it has moved to net9.0/net10.0 and dropped Prism.Forms.

This PR fixes every build and test failure. One red step remains — code signing — which is an expired Azure credential that cannot be fixed from the repository (see the blocker below).

What was failing, and why

Each fix was validated by re-running CI on this PR (the ci.yml change makes Prism CI run on the PR itself):

Job(s) Failure Root cause Fix
Maui, Uno NETSDK1202 (build) The net8.0 platform workloads are end-of-life CheckEolWorkloads/CheckEolTargetFramework=false in Directory.Build.props
Maui, Uno NETSDK1135, CS0246, CS1061 (build) With no SDK pin, CI resolved SDK 10.0.x, under which net8.0 workloads don't build (net8.0-ios infers TargetPlatformVersion 1.0; net8.0-android is missing MauiAppCompatActivity / ILifecycleBuilder.AddAndroid) Pin the SDK to 8.0.x in global.json (rollForward: latestMinor)
Forms MonoAndroid13.0 language targets missing (build) Xamarin was removed from windows-latest (now VS 18) and windows-2025 Pin the Forms job to windows-2022, the last hosted image with the Xamarin component
Core, Wpf testhost aborts: "You must install or update .NET" (Run Tests) The test projects target net6.0, whose runtime is EOL and not installed on the runner RollForward=Major for test projects
Core (and any job running Core.Tests) flaky AsyncDelegateCommandFixture.ICommandExecute_UsesDefaultTokenSourceFactory A fixed 10 ms wait after cancellation races on slower agents Poll for the state transition with a generous timeout

⚠️ Remaining blocker — not fixable in this PR

With the above fixes every job builds and tests, but the Sign NuGet Packages step then fails with:

AADSTS7000222: The provided client secret keys for app '***' are expired.

The Azure AD client secret used for code signing has expired. It must be rotated in the Azure portal and the CodeSignClientSecret repository secret updated. This was previously hidden behind the earlier build/test failures. No repository change can resolve it.

Verification

  • Confirmed CheckEolWorkloads/CheckEolTargetFramework evaluate to false; reproduced the sibling EOL check with Prism.Core net6.0 (NETSDK1138 present when forced on, gone with the fix).
  • global.json resolves to SDK 8.0.x locally; Prism.Core.Tests builds and passes 277/277 under it, including the de-flaked test.
  • Confirmed windows-2022 still ships Component.Xamarin; windows-2025 does not.
  • Re-ran CI per fix: Forms now builds; Maui restore now passes; Core/Wpf now build and test — all reaching the (separately-broken) signing step.

🤖 Generated with Claude Code

The first full CI run on the 9.0 branch in a while (triggered by the #3407
navigation backport push) failed due to toolchain drift, not the backported
code itself:

- Maui & Uno fail with NETSDK1202: the net8.0 platform workloads
  (net8.0-android/ios/maccatalyst/macos) are now end-of-life, and the CI SDK
  (10.0.301) fails the build over it. Opt out of the EOL checks via
  CheckEolWorkloads/CheckEolTargetFramework - the 9.0 maintenance branch
  intentionally targets .NET 8 for its lifecycle.

- Forms fails because the Xamarin.Android (MonoAndroid) language targets ship
  only with Visual Studio's Xamarin component, which was dropped from
  windows-latest (VS 18) and windows-2025. Pin the Forms job to windows-2022,
  the last hosted image that still includes it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@mergify

mergify Bot commented Jul 10, 2026

Copy link
Copy Markdown

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

build-prism-core and build-prism-wpf built cleanly but failed at "Run Tests":
the test projects target net6.0, whose runtime is EOL and no longer present on
the runner images, so the test host aborted with "You must install or update
.NET to run this application" before any test executed.

Set RollForward=Major for test projects so the host rolls net6.0 forward to the
newest installed major runtime. Runtime selection only - the test assemblies are
still built against net6.0. Verified locally: Prism.Core.Tests passes 277/277 and
the property lands in the test runtimeconfig the host reads.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: faa27845f5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/ci.yml
# Prism.Forms builds the Xamarin.Android (MonoAndroid) target, whose language targets
# ship only with Visual Studio's Xamarin component. That component was dropped from
# windows-latest (VS 18) and windows-2025, so pin to windows-2022 which still includes it.
runs-on: windows-2022

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Pin the release Forms job too

Pinning only the Prism CI Forms job leaves the release path on the template default runner. I checked .github/workflows/start-release.yml:37-45, and its identical build-prism-forms reusable workflow call still omits runs-on; the v1 template defaults that input to windows-latest, which this change identifies as missing the Xamarin.Android targets. When Start NuGet Release is manually run for release/stable/9.0, Forms packaging will still hit the same missing MonoAndroid13.0 targets, so the release workflow needs the same runs-on: windows-2022 pin.

Useful? React with 👍 / 👎.

dansiegel and others added 2 commits July 10, 2026 09:12
Without an SDK pin, CI resolves the newest preinstalled SDK (10.0.x). Under it the
net8.0 platform workloads no longer build: net8.0-ios infers TargetPlatformVersion 1.0
(NETSDK1135) and net8.0-android is missing the MAUI Android APIs (MauiAppCompatActivity,
ILifecycleBuilder.AddAndroid -> CS0246/CS1061). Pin to the 8.0 SDK this branch was built
with so the matching net8.0-era workloads are used. rollForward=latestMinor keeps it on
whichever 8.0.x the runner has installed (8.0.201 / 8.0.300).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ICommandExecute_UsesDefaultTokenSourceFactory cancelled the token then waited a fixed
10ms before asserting IsExecuting is false. Cancellation propagates asynchronously, so
on slower CI agents 10ms was not always enough and the test flaked (it aborted the whole
Prism.Core.Tests run). Poll for the state transition with a generous timeout instead.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@dansiegel dansiegel requested a review from brianlagunas as a code owner July 10, 2026 15:12
@dansiegel dansiegel changed the title ci: fix release/stable/9.0 build against current SDK & runner images ci: repair release/stable/9.0 build against current SDKs & runner images Jul 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant