From 00ced26157788917327b619c0114c768b19b7f9e Mon Sep 17 00:00:00 2001 From: ahall Date: Fri, 6 Nov 2026 15:26:04 +0000 Subject: [PATCH] ci: move iOS/Mac Catalyst sample jobs from macos-15 to macos-26 macOS arm64 jobs on macos-15 repeatedly failed to acquire a runner due to capacity constraints. Switch the MAUI, Avalonia and Uno iOS jobs to macos-26, keep the existing workload set and Xcode 26.3 pins (Xcode 26.3 is still installed on macos-26), and update the explanatory comments. Closes #622 --- .../build-samples-todoapp-avalonia.yml | 27 ++++++++++--------- .../workflows/build-samples-todoapp-maui.yml | 27 ++++++++++--------- .../workflows/build-samples-todoapp-uno.yml | 25 ++++++++--------- 3 files changed, 41 insertions(+), 38 deletions(-) diff --git a/.github/workflows/build-samples-todoapp-avalonia.yml b/.github/workflows/build-samples-todoapp-avalonia.yml index fda230d..c9a5c07 100644 --- a/.github/workflows/build-samples-todoapp-avalonia.yml +++ b/.github/workflows/build-samples-todoapp-avalonia.yml @@ -86,24 +86,25 @@ jobs: ios: # iOS builds require Xcode, which is only available on macOS runners. - # Pinned to macos-15 (rather than macos-latest) while that label migrates to macos-26 - # (see https://github.com/actions/runner-images/issues/14167, rollout through - # 2026-07-15): macos-latest can currently land on either image at random, each with a - # different default Xcode (16.4 vs 26.4.1), and macos-15's *default* Xcode (16.4) doesn't - # match what any currently-published net10.0 iOS SDK pack requires (see WorkloadSetVersion - # below) - so this job also explicitly selects a non-default Xcode already installed on - # the image (see the "Select Xcode" step) to match. See - # https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job once we - # deliberately upgrade to a newer, Xcode-26-compatible workload set. - runs-on: macos-15 + # Pinned to macos-26 (rather than macos-latest) so the Xcode toolchain doesn't change + # underneath us when the macos-latest label moves. macos-26 replaced the previous + # (older) macOS image because macOS arm64 jobs on that image repeatedly failed to acquire + # a runner due to capacity constraints (see + # https://github.com/CommunityToolkit/Datasync/issues/622). macos-26's default Xcode + # (26.6) is newer than what the pinned iOS SDK pack requires (see + # WorkloadSetVersion below), so this job explicitly selects an older Xcode that is + # already installed on the image (see the "Select Xcode" step) to match. See + # https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job + # once we deliberately drop the workload set pin and move to a newer Xcode. + runs-on: macos-26 env: # `dotnet workload install ios` alone always resolves the newest published # Microsoft.iOS.Sdk.net10.0_* pack. As of workload set 10.0.108, that's 26.5.10284, - # which requires Xcode 26.5 - not installed on macos-15 (even as a non-default Xcode). + # which requires Xcode 26.5 (installed on macos-26, but not the Xcode this job selects). # Pinning to 10.0.107 (the last set before the iOS/MacCatalyst/macOS/tvOS manifest moved # to the 26.4/26.5 pack line; see workload-set history for package id # Microsoft.NET.Workloads.10.0.100 on nuget.org) resolves 26.2.10233 instead, which - # requires Xcode 26.3 - installed (non-default) on macos-15 as of image 20260629.0276.1 + # requires Xcode 26.3 - installed (non-default) on macos-26 as of image 20261026.0455.2 # (see the "Select Xcode" step below). This also keeps other manifests (e.g. Android) at # their latest versions. `--version` pins only this job's `dotnet workload install` # invocation and the `restore`/`build` steps that follow it in the same runner - it's @@ -118,7 +119,7 @@ jobs: uses: actions/checkout@v7 - name: Select Xcode ${{ env.RequiredXcodeVersion }} - # macos-15 defaults to Xcode 16.4, which doesn't satisfy what the pinned iOS + # macos-26 defaults to Xcode 26.6, which doesn't match what the pinned iOS # workload (see WorkloadSetVersion above) requires. Xcode 26.3 is already installed # on the image, just not selected by default - so switch to it explicitly rather # than installing anything extra. diff --git a/.github/workflows/build-samples-todoapp-maui.yml b/.github/workflows/build-samples-todoapp-maui.yml index 60a0c4a..8b79b90 100644 --- a/.github/workflows/build-samples-todoapp-maui.yml +++ b/.github/workflows/build-samples-todoapp-maui.yml @@ -57,24 +57,25 @@ jobs: ios: # iOS builds require Xcode, which is only available on macOS runners. - # Pinned to macos-15 (rather than macos-latest) while that label migrates to macos-26 - # (see https://github.com/actions/runner-images/issues/14167, rollout through - # 2026-07-15): macos-latest can currently land on either image at random, each with a - # different default Xcode (16.4 vs 26.4.1), and macos-15's *default* Xcode (16.4) doesn't - # match what any currently-published net10.0 iOS SDK pack requires (see WorkloadSetVersion - # below) - so this job also explicitly selects a non-default Xcode already installed on - # the image (see the "Select Xcode" step) to match. See - # https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job once we - # deliberately upgrade to a newer, Xcode-26-compatible workload set. - runs-on: macos-15 + # Pinned to macos-26 (rather than macos-latest) so the Xcode toolchain doesn't change + # underneath us when the macos-latest label moves. macos-26 replaced the previous + # (older) macOS image because macOS arm64 jobs on that image repeatedly failed to acquire + # a runner due to capacity constraints (see + # https://github.com/CommunityToolkit/Datasync/issues/622). macos-26's default Xcode + # (26.6) is newer than what the pinned iOS SDK pack requires (see + # WorkloadSetVersion below), so this job explicitly selects an older Xcode that is + # already installed on the image (see the "Select Xcode" step) to match. See + # https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job + # once we deliberately drop the workload set pin and move to a newer Xcode. + runs-on: macos-26 env: # `dotnet workload install maui-ios` alone always resolves the newest published # Microsoft.iOS.Sdk.net10.0_* pack. As of workload set 10.0.108, that's 26.5.10284, - # which requires Xcode 26.5 - not installed on macos-15 (even as a non-default Xcode). + # which requires Xcode 26.5 (installed on macos-26, but not the Xcode this job selects). # Pinning to 10.0.107 (the last set before the iOS/MacCatalyst/macOS/tvOS manifest moved # to the 26.4/26.5 pack line; see workload-set history for package id # Microsoft.NET.Workloads.10.0.100 on nuget.org) resolves 26.2.10233 instead, which - # requires Xcode 26.3 - installed (non-default) on macos-15 as of image 20260629.0276.1 + # requires Xcode 26.3 - installed (non-default) on macos-26 as of image 20261026.0455.2 # (see the "Select Xcode" step below). This also keeps other manifests (e.g. MAUI, # Android) at their latest versions. `--version` pins only this job's # `dotnet workload install` invocation and the `restore`/`build` steps that follow it in @@ -89,7 +90,7 @@ jobs: uses: actions/checkout@v7 - name: Select Xcode ${{ env.RequiredXcodeVersion }} - # macos-15 defaults to Xcode 16.4, which doesn't satisfy what the pinned iOS + # macos-26 defaults to Xcode 26.6, which doesn't match what the pinned iOS # workload (see WorkloadSetVersion above) requires. Xcode 26.3 is already installed # on the image, just not selected by default - so switch to it explicitly rather # than installing anything extra. diff --git a/.github/workflows/build-samples-todoapp-uno.yml b/.github/workflows/build-samples-todoapp-uno.yml index 551df83..24cbd79 100644 --- a/.github/workflows/build-samples-todoapp-uno.yml +++ b/.github/workflows/build-samples-todoapp-uno.yml @@ -58,24 +58,25 @@ jobs: ios-maccatalyst: # iOS and Mac Catalyst builds both require Xcode, which is only available on macOS runners. - # Pinned to macos-15 (rather than macos-latest) while that label migrates to macos-26 - # (see https://github.com/actions/runner-images/issues/14167, rollout through - # 2026-07-15): macos-latest can currently land on either image at random, each with a - # different default Xcode (16.4 vs 26.4.1), and macos-15's *default* Xcode (16.4) doesn't - # match what any currently-published net10.0 iOS SDK pack requires (see WorkloadSetVersion - # below) - so this job also explicitly selects a non-default Xcode already installed on - # the image (see the "Select Xcode" step) to match. See + # Pinned to macos-26 (rather than macos-latest) so the Xcode toolchain doesn't change + # underneath us when the macos-latest label moves. macos-26 replaced the previous + # (older) macOS image because macOS arm64 jobs on that image repeatedly failed to acquire + # a runner due to capacity constraints (see + # https://github.com/CommunityToolkit/Datasync/issues/622). macos-26's default Xcode + # (26.6) is newer than what the pinned iOS SDK pack requires (see + # WorkloadSetVersion below), so this job explicitly selects an older Xcode that is + # already installed on the image (see the "Select Xcode" step) to match. See # https://github.com/CommunityToolkit/Datasync/issues/529 and #559. Revisit this whole job - # once we deliberately upgrade to a newer, Xcode-26-compatible workload set. - runs-on: macos-15 + # once we deliberately drop the workload set pin and move to a newer Xcode. + runs-on: macos-26 env: # `dotnet workload install ios maccatalyst` alone always resolves the newest published # Microsoft.iOS.Sdk.net10.0_* pack. As of workload set 10.0.108, that's 26.5.10284, - # which requires Xcode 26.5 - not installed on macos-15 (even as a non-default Xcode). + # which requires Xcode 26.5 (installed on macos-26, but not the Xcode this job selects). # Pinning to 10.0.107 (the last set before the iOS/MacCatalyst/macOS/tvOS manifest moved # to the 26.4/26.5 pack line; see workload-set history for package id # Microsoft.NET.Workloads.10.0.100 on nuget.org) resolves 26.2.10233 instead, which - # requires Xcode 26.3 - installed (non-default) on macos-15 as of image 20260629.0276.1 + # requires Xcode 26.3 - installed (non-default) on macos-26 as of image 20261026.0455.2 # (see the "Select Xcode" step below). `--version` pins only this job's # `dotnet workload install` invocation and the `restore`/`build` steps that follow it in # the same runner - it's intentionally not a repo-wide global.json pin, which would @@ -89,7 +90,7 @@ jobs: uses: actions/checkout@v7 - name: Select Xcode ${{ env.RequiredXcodeVersion }} - # macos-15 defaults to Xcode 16.4, which doesn't satisfy what the pinned iOS/Mac + # macos-26 defaults to Xcode 26.6, which doesn't match what the pinned iOS/Mac # Catalyst workload (see WorkloadSetVersion above) requires. Xcode 26.3 is already # installed on the image, just not selected by default - so switch to it explicitly # rather than installing anything extra.