ci: repair release/stable/9.0 build against current SDKs & runner images#3408
ci: repair release/stable/9.0 build against current SDKs & runner images#3408dansiegel wants to merge 4 commits into
Conversation
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>
|
Tick the box to add this pull request to the merge queue (same as
|
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>
There was a problem hiding this comment.
💡 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".
| # 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 |
There was a problem hiding this comment.
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 👍 / 👎.
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>
Summary
Pushing the #3405 navigation backport (#3407) triggered the first full
Prism CIrun onrelease/stable/9.0in 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.masteris unaffected because it has moved to net9.0/net10.0 and droppedPrism.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.ymlchange makesPrism CIrun on the PR itself):NETSDK1202(build)CheckEolWorkloads/CheckEolTargetFramework=falseinDirectory.Build.propsNETSDK1135,CS0246,CS1061(build)TargetPlatformVersion 1.0; net8.0-android is missingMauiAppCompatActivity/ILifecycleBuilder.AddAndroid)global.json(rollForward: latestMinor)MonoAndroid13.0language targets missing (build)windows-latest(now VS 18) andwindows-2025windows-2022, the last hosted image with the Xamarin componentRollForward=Majorfor test projectsAsyncDelegateCommandFixture.ICommandExecute_UsesDefaultTokenSourceFactoryWith the above fixes every job builds and tests, but the Sign NuGet Packages step then fails with:
The Azure AD client secret used for code signing has expired. It must be rotated in the Azure portal and the
CodeSignClientSecretrepository secret updated. This was previously hidden behind the earlier build/test failures. No repository change can resolve it.Verification
CheckEolWorkloads/CheckEolTargetFrameworkevaluate tofalse; reproduced the sibling EOL check withPrism.Corenet6.0 (NETSDK1138present when forced on, gone with the fix).global.jsonresolves to SDK 8.0.x locally;Prism.Core.Testsbuilds and passes 277/277 under it, including the de-flaked test.windows-2022still shipsComponent.Xamarin;windows-2025does not.🤖 Generated with Claude Code