Skip to content

Commit 75efc03

Browse files
authored
infra: move CI to use Xcode 26 and macOS 26 (#15997)
1 parent 3a26926 commit 75efc03

30 files changed

+257
-105
lines changed

.github/workflows/_build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ on:
2626
xcode:
2727
required: false
2828
type: string
29-
default: 'Xcode_16.4'
29+
default: 'Xcode_26.4'
3030
os:
3131
required: false
3232
type: string
33-
default: 'macos-15'
33+
default: 'macos-26'
3434
timeout_minutes:
3535
required: false
3636
type: number

.github/workflows/_catalyst.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ jobs:
2727
catalyst:
2828
# Run on the main repo's scheduled jobs or pull requests and manual workflow invocations.
2929
if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name)
30-
runs-on: macos-15
30+
runs-on: macos-26
3131
steps:
3232
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
3333
- uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1
3434
- name: Setup Bundler
3535
run: scripts/setup_bundler.sh
3636
- name: Xcode
37-
run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
37+
run: sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
3838
- uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
3939
with:
4040
timeout_minutes: 20

.github/workflows/_cocoapods.cron.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ on:
3838
xcode:
3939
type: string
4040
required: false
41-
default: "Xcode_16.4"
41+
default: "Xcode_26.2"
4242

4343
# The runner to use.
4444
runs_on:
@@ -78,6 +78,15 @@ jobs:
7878
env:
7979
XCODE_VERSION: ${{ inputs.xcode }}
8080
run: sudo xcode-select -s /Applications/"$XCODE_VERSION".app/Contents/Developer
81+
- name: Install simulators in case they are missing.
82+
if: matrix.platform != 'macos'
83+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
84+
with:
85+
timeout_minutes: 15
86+
max_attempts: 5
87+
retry_wait_seconds: 120
88+
continue_on_error: true
89+
command: xcodebuild -downloadPlatform ${{ matrix.platform }}
8190
- name: Set FIREBASE_CI, if needed.
8291
if: inputs.ignore_deprecation_warnings == true
8392
run: echo "FIREBASE_CI=true" >> "$GITHUB_ENV"

.github/workflows/_cocoapods.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,13 @@ jobs:
124124
fail-fast: false
125125
matrix:
126126
os: [macos-15, macos-26]
127-
xcode: [Xcode_16.4, Xcode_26.2]
127+
xcode: [Xcode_26.2, Xcode_26.4]
128128
platform: [iOS, tvOS, macOS, watchOS]
129129
exclude:
130130
- os: macos-15
131-
xcode: Xcode_26.2
131+
xcode: Xcode_26.4
132132
- os: macos-26
133-
xcode: Xcode_16.4
133+
xcode: Xcode_26.2
134134
runs-on: ${{ matrix.os }}
135135
steps:
136136
- name: Skip, if applicable.

.github/workflows/_quickstart.framework.yml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ on:
4141
os:
4242
required: false
4343
type: string
44-
default: macos-15
44+
default: macos-26
4545
# The version of Xcode to use.
4646
xcode:
4747
required: false
4848
type: string
49-
default: Xcode_16.4
49+
default: Xcode_26.4
5050
secrets:
5151
# The passphrase for decrypting the GoogleService-Info.plist.
5252
plist_secret:
@@ -75,6 +75,16 @@ jobs:
7575
env:
7676
XCODE_VERSION: ${{ inputs.xcode }}
7777
run: sudo xcode-select -s /Applications/"$XCODE_VERSION".app/Contents/Developer
78+
- name: Install simulators
79+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
80+
with:
81+
timeout_minutes: 15
82+
max_attempts: 5
83+
retry_wait_seconds: 120
84+
continue_on_error: true
85+
command: |
86+
xcodebuild -downloadPlatform iOS
87+
xcodebuild -downloadPlatform tvOS
7888
- name: Setup Bundler
7989
run: ./scripts/setup_bundler.sh
8090
- name: Move frameworks

.github/workflows/_quickstart.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ jobs:
6969
plist_secret: ${{ secrets.plist_secret }}
7070
QUICKSTART_BRANCH: ${{ inputs.quickstart_branch }}
7171
FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
72-
runs-on: macos-15
72+
runs-on: macos-26
7373
steps:
7474
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
7575
with:
@@ -78,7 +78,15 @@ jobs:
7878
- name: Prereqs
7979
run: gem install xcpretty
8080
- name: Xcode
81-
run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
81+
run: sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
82+
- name: Install simulators
83+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
84+
with:
85+
timeout_minutes: 15
86+
max_attempts: 5
87+
retry_wait_seconds: 120
88+
continue_on_error: true
89+
command: xcodebuild -downloadPlatform iOS
8290
- name: Run setup command.
8391
run: ${{ inputs.setup_command }}
8492
- name: Install Secret GoogleService-Info.plist

.github/workflows/_spm.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,13 @@ jobs:
6767
spm-package-resolved:
6868
env:
6969
FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
70-
runs-on: macos-15
70+
runs-on: macos-26
7171
outputs:
7272
cache_key: ${{ steps.generate_cache_key.outputs.cache_key }}
7373
steps:
7474
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
7575
- name: Xcode
76-
run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
76+
run: sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
7777
- name: Generate Swift Package.resolved
7878
id: swift_package_resolve
7979
run: swift package resolve
@@ -98,13 +98,13 @@ jobs:
9898
fail-fast: false
9999
matrix:
100100
os: [macos-15, macos-26]
101-
xcode: [Xcode_16.4, Xcode_26.2]
101+
xcode: [Xcode_26.2, Xcode_26.4]
102102
platform: [iOS, tvOS, macOS, watchOS, catalyst, visionOS]
103103
exclude:
104104
- os: macos-15
105-
xcode: Xcode_26.2
105+
xcode: Xcode_26.4
106106
- os: macos-26
107-
xcode: Xcode_16.4
107+
xcode: Xcode_26.2
108108
runs-on: ${{ matrix.os }}
109109
steps:
110110
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

.github/workflows/infra.archiving.yml

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,23 @@ jobs:
2222
pods-ios-only-cron:
2323
# Don't run on private repo.
2424
if: github.repository == 'Firebase/firebase-ios-sdk'
25-
runs-on: macos-15
25+
runs-on: macos-26
2626
strategy:
2727
matrix:
2828
# These need to be on a single line or else the formatting won't validate.
2929
pod: ["FirebaseAppDistribution", "FirebaseInAppMessaging", "FirebasePerformance"]
3030
steps:
3131
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
3232
- name: Set Xcode version
33-
run: sudo xcode-select -s /Applications/Xcode_16.4.app
33+
run: sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
34+
- name: Install iOS SDK
35+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
36+
with:
37+
timeout_minutes: 15
38+
max_attempts: 5
39+
retry_wait_seconds: 120
40+
continue_on_error: true
41+
command: xcodebuild -downloadPlatform iOS
3442
- uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1
3543
- name: Setup Bundler
3644
run: scripts/setup_bundler.sh
@@ -47,7 +55,7 @@ jobs:
4755
pods-ios-tvos-macos-cron:
4856
# Don't run on private repo.
4957
if: github.repository == 'Firebase/firebase-ios-sdk'
50-
runs-on: macos-15
58+
runs-on: macos-26
5159
strategy:
5260
matrix:
5361
target: [ios, tvos, macos]
@@ -56,7 +64,21 @@ jobs:
5664
steps:
5765
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
5866
- name: Set Xcode version
59-
run: sudo xcode-select -s /Applications/Xcode_16.4.app
67+
run: sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
68+
- name: Install SDK
69+
if: matrix.target != 'macos'
70+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
71+
with:
72+
timeout_minutes: 15
73+
max_attempts: 5
74+
retry_wait_seconds: 120
75+
continue_on_error: true
76+
command: |
77+
if [[ "${{ matrix.target }}" == "ios" ]]; then
78+
xcodebuild -downloadPlatform iOS
79+
elif [[ "${{ matrix.target }}" == "tvos" ]]; then
80+
xcodebuild -downloadPlatform tvOS
81+
fi
6082
- uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1
6183
- name: Setup Bundler
6284
run: scripts/setup_bundler.sh

.github/workflows/infra.spm_global.yml

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ jobs:
2929
spm-package-resolved:
3030
env:
3131
FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
32-
runs-on: macos-15
32+
runs-on: macos-26
3333
outputs:
3434
cache_key: ${{ steps.generate_cache_key.outputs.cache_key }}
3535
steps:
3636
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
3737
- name: Xcode
38-
run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
38+
run: sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
3939
- name: Generate Swift Package.resolved
4040
id: swift_package_resolve
4141
run: |
@@ -59,7 +59,10 @@ jobs:
5959
matrix:
6060
include:
6161
- os: macos-15
62-
xcode: Xcode_16.4
62+
xcode: Xcode_26.2
63+
test: spm
64+
- os: macos-26
65+
xcode: Xcode_26.4
6366
test: spm
6467
runs-on: ${{ matrix.os }}
6568
steps:
@@ -72,6 +75,14 @@ jobs:
7275
run: scripts/update_vertexai_responses.sh
7376
- name: Xcode
7477
run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
78+
- name: Install simulators in case they are missing.
79+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
80+
with:
81+
timeout_minutes: 15
82+
max_attempts: 5
83+
retry_wait_seconds: 120
84+
continue_on_error: true
85+
command: xcodebuild -downloadPlatform iOS
7586
- name: Initialize xcodebuild
7687
run: scripts/setup_spm_tests.sh
7788
- name: Functions Integration Test Server
@@ -97,8 +108,8 @@ jobs:
97108
strategy:
98109
matrix:
99110
include:
100-
- os: macos-15
101-
xcode: Xcode_16.4
111+
- os: macos-26
112+
xcode: Xcode_26.4
102113
runs-on: ${{ matrix.os }}
103114
steps:
104115
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -110,6 +121,14 @@ jobs:
110121
run: scripts/update_vertexai_responses.sh
111122
- name: Xcode
112123
run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
124+
- name: Install simulators in case they are missing.
125+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
126+
with:
127+
timeout_minutes: 15
128+
max_attempts: 5
129+
retry_wait_seconds: 120
130+
continue_on_error: true
131+
command: xcodebuild -downloadPlatform iOS
113132
- name: Initialize xcodebuild
114133
run: scripts/setup_spm_tests.sh
115134
- name: iOS Device and Test Build
@@ -132,8 +151,8 @@ jobs:
132151
# targets need Analytics.
133152
target: [tvOS, macOS, catalyst]
134153
include:
135-
- os: macos-15
136-
xcode: Xcode_16.4
154+
- os: macos-26
155+
xcode: Xcode_26.4
137156
runs-on: ${{ matrix.os }}
138157
steps:
139158
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -143,6 +162,15 @@ jobs:
143162
key: ${{needs.spm-package-resolved.outputs.cache_key}}
144163
- name: Xcode
145164
run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
165+
- name: Install simulators in case they are missing.
166+
if: matrix.target != 'macOS' && matrix.target != 'catalyst'
167+
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
168+
with:
169+
timeout_minutes: 15
170+
max_attempts: 5
171+
retry_wait_seconds: 120
172+
continue_on_error: true
173+
command: xcodebuild -downloadPlatform ${{ matrix.target }}
146174
- name: Initialize xcodebuild
147175
run: scripts/setup_spm_tests.sh
148176
- name: Objc Import Tests
@@ -159,4 +187,3 @@ jobs:
159187
name: spm-platforms-${{ matrix.target }}-${{ matrix.os }}-${{ matrix.xcode }}-logs
160188
path: xcodebuild-*.log
161189
if-no-files-found: error
162-

.github/workflows/release.zip.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ jobs:
117117
github.repository == 'firebase/firebase-ios-sdk' &&
118118
contains(fromJSON('["schedule", "pull_request", "workflow_dispatch"]'), github.event_name) &&
119119
needs.should_package.outputs.should_package == 'true'
120-
runs-on: macos-15
120+
runs-on: macos-26
121121
steps:
122122
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
123123
with:
@@ -192,7 +192,7 @@ jobs:
192192
if: ${{ !cancelled() }}
193193
env:
194194
FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
195-
runs-on: macos-15
195+
runs-on: macos-26
196196
steps:
197197
- name: Xcode
198198
run: sudo xcode-select -s /Applications/${{ env.MIN_XCODE }}.app/Contents/Developer
@@ -264,6 +264,7 @@ jobs:
264264
plist_src: "scripts/gha-encrypted/qs-crashlytics.plist.gpg"
265265
plist_dst: "quickstart-ios/crashlytics/GoogleService-Info.plist"
266266
command: |
267+
xcodebuild -downloadPlatform watchOS
267268
rm -rf "${HOME}"/ios_frameworks/Firebase/FirebaseAnalytics/FirebaseAnalytics*
268269
rm -rf "${HOME}"/ios_frameworks/Firebase/FirebaseAnalytics/GoogleAppMeasurement*
269270
rm -rf "${HOME}"/ios_frameworks/Firebase/FirebaseAnalytics/GoogleAds*
@@ -348,6 +349,9 @@ jobs:
348349
zip_run_id: ${{ needs.packaging_done.outputs.run_id }}
349350
artifact_name: ${{ matrix.artifact }}
350351
# Use defaults with option to override
352+
# TODO(ncooke3): Fast follow #15997. Replace with:
353+
# os: ${{ matrix.config.os || 'macos-26' }}
354+
# xcode: ${{ matrix.config.xcode || 'Xcode_26.4' }}
351355
os: ${{ matrix.config.os || 'macos-15' }}
352356
xcode: ${{ matrix.config.xcode || 'Xcode_26.3' }}
353357
# Optional scheme (only used by FirebaseAI)

0 commit comments

Comments
 (0)