Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ jobs:
build-prism-forms:
uses: avantipoint/workflow-templates/.github/workflows/msbuild-build.yml@v1
with:
# 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 👍 / 👎.

name: Build Prism.Forms
solution-path: PrismLibrary_Forms.slnf
code-sign: true
Expand Down
20 changes: 20 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@
</PolySharpIncludeGeneratedTypes>
<WarningsAsErrors>$(WarningsAsErrors);IDE0003</WarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
<!--
Prism 9.0 is a maintenance branch that intentionally targets .NET 8 and its platform
workloads (net8.0-android, net8.0-ios, net8.0-maccatalyst, net8.0-macos). Current .NET
SDKs flag these as end-of-life - NETSDK1202 for the workloads and NETSDK1138 for the
target framework - which fails the build. Opt out of the EOL checks so the branch keeps
building on current SDKs; shipping these targets for the 9.0 lifecycle is intentional.
-->
<CheckEolWorkloads>false</CheckEolWorkloads>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
</PropertyGroup>

<PropertyGroup>
Expand Down Expand Up @@ -129,6 +138,17 @@
<None Include="build\Package.targets" Pack="true" PackagePath="buildTransitive\$(PackageId).targets" Condition="exists('build\Package.targets')"/>
</ItemGroup>

<!--
The test projects target net6.0, which is end-of-life and no longer present on the CI
runner images (only newer runtimes are installed). Roll the test host forward to the
newest installed major runtime so the tests can execute; without this the testhost aborts
with "You must install or update .NET to run this application". This affects runtime
selection only - the test assemblies are still built against net6.0.
-->
<PropertyGroup Condition=" $(IsTestProject) ">
<RollForward>Major</RollForward>
</PropertyGroup>

<ItemGroup Condition=" $(IsTestProject) ">
<None Include="$(MSBuildThisFileDirectory)xunit.runner.json"
CopyToOutputDirectory="PreserveNewest" />
Expand Down
4 changes: 4 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{
"sdk": {
"version": "8.0.100",
"rollForward": "latestMinor"
},
"msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.56",
"MSBuild.Sdk.Extras": "3.0.44",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,12 @@ public async Task ICommandExecute_UsesDefaultTokenSourceFactory()

Assert.True(command.IsExecuting);
cts.Cancel();
await Task.Delay(10);

// Cancellation propagates asynchronously; a fixed delay races on slower CI agents.
// Poll until the command stops executing, bounded by a generous timeout.
var timeout = Task.Delay(2000);
while (command.IsExecuting && !timeout.IsCompleted)
await Task.Delay(10);

Assert.False(command.IsExecuting);
}
Expand Down
Loading