Skip to content

Commit 5b1e1cc

Browse files
authored
ci: move iOS/Mac Catalyst sample jobs from macos-15 to macos-26 (#626)
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
1 parent 8b4df66 commit 5b1e1cc

3 files changed

Lines changed: 41 additions & 38 deletions

File tree

‎.github/workflows/build-samples-todoapp-avalonia.yml‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -86,24 +86,25 @@ jobs:
8686
8787
ios:
8888
# iOS builds require Xcode, which is only available on macOS runners.
89-
# Pinned to macos-15 (rather than macos-latest) while that label migrates to macos-26
90-
# (see https://github.com/actions/runner-images/issues/14167, rollout through
91-
# 2026-07-15): macos-latest can currently land on either image at random, each with a
92-
# different default Xcode (16.4 vs 26.4.1), and macos-15's *default* Xcode (16.4) doesn't
93-
# match what any currently-published net10.0 iOS SDK pack requires (see WorkloadSetVersion
94-
# below) - so this job also explicitly selects a non-default Xcode already installed on
95-
# the image (see the "Select Xcode" step) to match. See
96-
# https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job once we
97-
# deliberately upgrade to a newer, Xcode-26-compatible workload set.
98-
runs-on: macos-15
89+
# Pinned to macos-26 (rather than macos-latest) so the Xcode toolchain doesn't change
90+
# underneath us when the macos-latest label moves. macos-26 replaced the previous
91+
# (older) macOS image because macOS arm64 jobs on that image repeatedly failed to acquire
92+
# a runner due to capacity constraints (see
93+
# https://github.com/CommunityToolkit/Datasync/issues/622). macos-26's default Xcode
94+
# (26.6) is newer than what the pinned iOS SDK pack requires (see
95+
# WorkloadSetVersion below), so this job explicitly selects an older Xcode that is
96+
# already installed on the image (see the "Select Xcode" step) to match. See
97+
# https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job
98+
# once we deliberately drop the workload set pin and move to a newer Xcode.
99+
runs-on: macos-26
99100
env:
100101
# `dotnet workload install ios` alone always resolves the newest published
101102
# Microsoft.iOS.Sdk.net10.0_* pack. As of workload set 10.0.108, that's 26.5.10284,
102-
# which requires Xcode 26.5 - not installed on macos-15 (even as a non-default Xcode).
103+
# which requires Xcode 26.5 (installed on macos-26, but not the Xcode this job selects).
103104
# Pinning to 10.0.107 (the last set before the iOS/MacCatalyst/macOS/tvOS manifest moved
104105
# to the 26.4/26.5 pack line; see workload-set history for package id
105106
# Microsoft.NET.Workloads.10.0.100 on nuget.org) resolves 26.2.10233 instead, which
106-
# requires Xcode 26.3 - installed (non-default) on macos-15 as of image 20260629.0276.1
107+
# requires Xcode 26.3 - installed (non-default) on macos-26 as of image 20261026.0455.2
107108
# (see the "Select Xcode" step below). This also keeps other manifests (e.g. Android) at
108109
# their latest versions. `--version` pins only this job's `dotnet workload install`
109110
# invocation and the `restore`/`build` steps that follow it in the same runner - it's
@@ -118,7 +119,7 @@ jobs:
118119
uses: actions/checkout@v7
119120

120121
- name: Select Xcode ${{ env.RequiredXcodeVersion }}
121-
# macos-15 defaults to Xcode 16.4, which doesn't satisfy what the pinned iOS
122+
# macos-26 defaults to Xcode 26.6, which doesn't match what the pinned iOS
122123
# workload (see WorkloadSetVersion above) requires. Xcode 26.3 is already installed
123124
# on the image, just not selected by default - so switch to it explicitly rather
124125
# than installing anything extra.

‎.github/workflows/build-samples-todoapp-maui.yml‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,24 +57,25 @@ jobs:
5757
5858
ios:
5959
# iOS builds require Xcode, which is only available on macOS runners.
60-
# Pinned to macos-15 (rather than macos-latest) while that label migrates to macos-26
61-
# (see https://github.com/actions/runner-images/issues/14167, rollout through
62-
# 2026-07-15): macos-latest can currently land on either image at random, each with a
63-
# different default Xcode (16.4 vs 26.4.1), and macos-15's *default* Xcode (16.4) doesn't
64-
# match what any currently-published net10.0 iOS SDK pack requires (see WorkloadSetVersion
65-
# below) - so this job also explicitly selects a non-default Xcode already installed on
66-
# the image (see the "Select Xcode" step) to match. See
67-
# https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job once we
68-
# deliberately upgrade to a newer, Xcode-26-compatible workload set.
69-
runs-on: macos-15
60+
# Pinned to macos-26 (rather than macos-latest) so the Xcode toolchain doesn't change
61+
# underneath us when the macos-latest label moves. macos-26 replaced the previous
62+
# (older) macOS image because macOS arm64 jobs on that image repeatedly failed to acquire
63+
# a runner due to capacity constraints (see
64+
# https://github.com/CommunityToolkit/Datasync/issues/622). macos-26's default Xcode
65+
# (26.6) is newer than what the pinned iOS SDK pack requires (see
66+
# WorkloadSetVersion below), so this job explicitly selects an older Xcode that is
67+
# already installed on the image (see the "Select Xcode" step) to match. See
68+
# https://github.com/CommunityToolkit/Datasync/issues/529. Revisit this whole job
69+
# once we deliberately drop the workload set pin and move to a newer Xcode.
70+
runs-on: macos-26
7071
env:
7172
# `dotnet workload install maui-ios` alone always resolves the newest published
7273
# Microsoft.iOS.Sdk.net10.0_* pack. As of workload set 10.0.108, that's 26.5.10284,
73-
# which requires Xcode 26.5 - not installed on macos-15 (even as a non-default Xcode).
74+
# which requires Xcode 26.5 (installed on macos-26, but not the Xcode this job selects).
7475
# Pinning to 10.0.107 (the last set before the iOS/MacCatalyst/macOS/tvOS manifest moved
7576
# to the 26.4/26.5 pack line; see workload-set history for package id
7677
# Microsoft.NET.Workloads.10.0.100 on nuget.org) resolves 26.2.10233 instead, which
77-
# requires Xcode 26.3 - installed (non-default) on macos-15 as of image 20260629.0276.1
78+
# requires Xcode 26.3 - installed (non-default) on macos-26 as of image 20261026.0455.2
7879
# (see the "Select Xcode" step below). This also keeps other manifests (e.g. MAUI,
7980
# Android) at their latest versions. `--version` pins only this job's
8081
# `dotnet workload install` invocation and the `restore`/`build` steps that follow it in
@@ -89,7 +90,7 @@ jobs:
8990
uses: actions/checkout@v7
9091

9192
- name: Select Xcode ${{ env.RequiredXcodeVersion }}
92-
# macos-15 defaults to Xcode 16.4, which doesn't satisfy what the pinned iOS
93+
# macos-26 defaults to Xcode 26.6, which doesn't match what the pinned iOS
9394
# workload (see WorkloadSetVersion above) requires. Xcode 26.3 is already installed
9495
# on the image, just not selected by default - so switch to it explicitly rather
9596
# than installing anything extra.

‎.github/workflows/build-samples-todoapp-uno.yml‎

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,25 @@ jobs:
5858
5959
ios-maccatalyst:
6060
# iOS and Mac Catalyst builds both require Xcode, which is only available on macOS runners.
61-
# Pinned to macos-15 (rather than macos-latest) while that label migrates to macos-26
62-
# (see https://github.com/actions/runner-images/issues/14167, rollout through
63-
# 2026-07-15): macos-latest can currently land on either image at random, each with a
64-
# different default Xcode (16.4 vs 26.4.1), and macos-15's *default* Xcode (16.4) doesn't
65-
# match what any currently-published net10.0 iOS SDK pack requires (see WorkloadSetVersion
66-
# below) - so this job also explicitly selects a non-default Xcode already installed on
67-
# the image (see the "Select Xcode" step) to match. See
61+
# Pinned to macos-26 (rather than macos-latest) so the Xcode toolchain doesn't change
62+
# underneath us when the macos-latest label moves. macos-26 replaced the previous
63+
# (older) macOS image because macOS arm64 jobs on that image repeatedly failed to acquire
64+
# a runner due to capacity constraints (see
65+
# https://github.com/CommunityToolkit/Datasync/issues/622). macos-26's default Xcode
66+
# (26.6) is newer than what the pinned iOS SDK pack requires (see
67+
# WorkloadSetVersion below), so this job explicitly selects an older Xcode that is
68+
# already installed on the image (see the "Select Xcode" step) to match. See
6869
# https://github.com/CommunityToolkit/Datasync/issues/529 and #559. Revisit this whole job
69-
# once we deliberately upgrade to a newer, Xcode-26-compatible workload set.
70-
runs-on: macos-15
70+
# once we deliberately drop the workload set pin and move to a newer Xcode.
71+
runs-on: macos-26
7172
env:
7273
# `dotnet workload install ios maccatalyst` alone always resolves the newest published
7374
# Microsoft.iOS.Sdk.net10.0_* pack. As of workload set 10.0.108, that's 26.5.10284,
74-
# which requires Xcode 26.5 - not installed on macos-15 (even as a non-default Xcode).
75+
# which requires Xcode 26.5 (installed on macos-26, but not the Xcode this job selects).
7576
# Pinning to 10.0.107 (the last set before the iOS/MacCatalyst/macOS/tvOS manifest moved
7677
# to the 26.4/26.5 pack line; see workload-set history for package id
7778
# Microsoft.NET.Workloads.10.0.100 on nuget.org) resolves 26.2.10233 instead, which
78-
# requires Xcode 26.3 - installed (non-default) on macos-15 as of image 20260629.0276.1
79+
# requires Xcode 26.3 - installed (non-default) on macos-26 as of image 20261026.0455.2
7980
# (see the "Select Xcode" step below). `--version` pins only this job's
8081
# `dotnet workload install` invocation and the `restore`/`build` steps that follow it in
8182
# the same runner - it's intentionally not a repo-wide global.json pin, which would
@@ -89,7 +90,7 @@ jobs:
8990
uses: actions/checkout@v7
9091

9192
- name: Select Xcode ${{ env.RequiredXcodeVersion }}
92-
# macos-15 defaults to Xcode 16.4, which doesn't satisfy what the pinned iOS/Mac
93+
# macos-26 defaults to Xcode 26.6, which doesn't match what the pinned iOS/Mac
9394
# Catalyst workload (see WorkloadSetVersion above) requires. Xcode 26.3 is already
9495
# installed on the image, just not selected by default - so switch to it explicitly
9596
# rather than installing anything extra.

0 commit comments

Comments
 (0)