Skip to content

Commit 7ed5a41

Browse files
authored
Macos setup command (#3236)
Add per-xcode setup command ### Motivation: Sometimes individual Xcodes require different steps to fixup simulator configuration. ### Modifications: * Allow the config to define custom setup steps * Add some `simctl` commands to Xcode 16.2 by default to workaround issues ### Result: Adopters can specify their own setup steps Example of this working with a test shim in place https://github.com/apple/swift-nio/actions/runs/14992683747/job/42119567309?pr=3236
1 parent a0c542b commit 7ed5a41

File tree

1 file changed

+41
-5
lines changed

1 file changed

+41
-5
lines changed

.github/workflows/macos_tests.yml

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ on:
2323
type: string
2424
description: "The arguments passed to swift test in the macOS 5.10 Swift version matrix job."
2525
default: ""
26+
xcode_16_0_setup_command:
27+
type: string
28+
description: "The command(s) to be executed before all other work."
29+
default: ""
2630
xcode_16_1_enabled:
2731
type: boolean
2832
description: "Boolean to enable the Xcode version 16.1 jobs. Defaults to true."
@@ -35,6 +39,10 @@ on:
3539
type: string
3640
description: "The arguments passed to swift test in the Xcode version 16.1 job."
3741
default: ""
42+
xcode_16_1_setup_command:
43+
type: string
44+
description: "The command(s) to be executed before all other work."
45+
default: ""
3846
xcode_16_2_enabled:
3947
type: boolean
4048
description: "Boolean to enable the Xcode version 16.2 jobs. Defaults to true."
@@ -47,6 +55,10 @@ on:
4755
type: string
4856
description: "The arguments passed to swift test in the Xcode version 16.2 job."
4957
default: ""
58+
xcode_16_2_setup_command:
59+
type: string
60+
description: "The command(s) to be executed before all other work."
61+
default: "xcrun simctl runtime match set iphoneos18.2 22D8075 && xcrun simctl runtime match set xros2.2 22N895"
5062
xcode_16_3_enabled:
5163
type: boolean
5264
description: "Boolean to enable the Xcode version 16.3 jobs. Defaults to true."
@@ -59,6 +71,10 @@ on:
5971
type: string
6072
description: "The arguments passed to swift test in the Xcode version 16.3 job."
6173
default: ""
74+
xcode_16_3_setup_command:
75+
type: string
76+
description: "The command(s) to be executed before all other work."
77+
default: ""
6278

6379
build_scheme:
6480
type: string
@@ -132,60 +148,70 @@ jobs:
132148
xcode_15_4_enabled="${MATRIX_MACOS_15_4_ENABLED:=true}"
133149
xcode_15_4_build_arguments_override="${MATRIX_MACOS_15_4_BUILD_ARGUMENTS_OVERRIDE:=""}"
134150
xcode_15_4_test_arguments_override="${MATRIX_MACOS_15_4_TEST_ARGUMENTS_OVERRIDE:=""}"
151+
xcode_15_4_setup_command="${MATRIX_MACOS_15_4_SETUP_COMMAND:=""}"
135152
xcode_16_0_enabled="${MATRIX_MACOS_16_0_ENABLED:=true}"
136153
xcode_16_0_build_arguments_override="${MATRIX_MACOS_16_0_BUILD_ARGUMENTS_OVERRIDE:=""}"
137154
xcode_16_0_test_arguments_override="${MATRIX_MACOS_16_0_TEST_ARGUMENTS_OVERRIDE:=""}"
155+
xcode_16_0_setup_command="${MATRIX_MACOS_16_0_SETUP_COMMAND:=""}"
138156
xcode_16_1_enabled="${MATRIX_MACOS_16_1_ENABLED:=true}"
139157
xcode_16_1_build_arguments_override="${MATRIX_MACOS_16_1_BUILD_ARGUMENTS_OVERRIDE:=""}"
140158
xcode_16_1_test_arguments_override="${MATRIX_MACOS_16_1_TEST_ARGUMENTS_OVERRIDE:=""}"
159+
xcode_16_1_setup_command="${MATRIX_MACOS_16_1_SETUP_COMMAND:=""}"
141160
xcode_16_2_enabled="${MATRIX_MACOS_16_2_ENABLED:=true}"
142161
xcode_16_2_build_arguments_override="${MATRIX_MACOS_16_2_BUILD_ARGUMENTS_OVERRIDE:=""}"
143162
xcode_16_2_test_arguments_override="${MATRIX_MACOS_16_2_TEST_ARGUMENTS_OVERRIDE:=""}"
163+
xcode_16_2_setup_command="${MATRIX_MACOS_16_2_SETUP_COMMAND:=""}"
144164
xcode_16_3_enabled="${MATRIX_MACOS_16_3_ENABLED:=true}"
145165
xcode_16_3_build_arguments_override="${MATRIX_MACOS_16_3_BUILD_ARGUMENTS_OVERRIDE:=""}"
146166
xcode_16_3_test_arguments_override="${MATRIX_MACOS_16_3_TEST_ARGUMENTS_OVERRIDE:=""}"
167+
xcode_16_3_setup_command="${MATRIX_MACOS_16_3_SETUP_COMMAND:=""}"
147168
148169
# Create matrix from inputs
149170
matrix='{"config": []}'
150171
151172
if [[ "$xcode_15_4_enabled" == "true" ]]; then
152173
matrix=$(echo "$matrix" | jq -c \
174+
--arg setup_command "$xcode_15_4_setup_command" \
153175
--arg build_arguments_override "$xcode_15_4_build_arguments_override" \
154176
--arg test_arguments_override "$xcode_15_4_test_arguments_override" \
155177
--arg runner_pool "$runner_pool" \
156-
'.config[.config| length] |= . + { "name": "Xcode 15.4", "xcode_version": "15.4", "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
178+
'.config[.config| length] |= . + { "name": "Xcode 15.4", "xcode_version": "15.4", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
157179
fi
158180
159181
if [[ "$xcode_16_0_enabled" == "true" ]]; then
160182
matrix=$(echo "$matrix" | jq -c \
183+
--arg setup_command "$xcode_16_0_setup_command" \
161184
--arg build_arguments_override "$xcode_16_0_build_arguments_override" \
162185
--arg test_arguments_override "$xcode_16_0_test_arguments_override" \
163186
--arg runner_pool "$runner_pool" \
164-
'.config[.config| length] |= . + { "name": "Xcode 16.0", "xcode_version": "16.0", "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
187+
'.config[.config| length] |= . + { "name": "Xcode 16.0", "xcode_version": "16.0", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
165188
fi
166189
167190
if [[ "$xcode_16_1_enabled" == "true" ]]; then
168191
matrix=$(echo "$matrix" | jq -c \
192+
--arg setup_command "$xcode_16_1_setup_command" \
169193
--arg build_arguments_override "$xcode_16_1_build_arguments_override" \
170194
--arg test_arguments_override "$xcode_16_1_test_arguments_override" \
171195
--arg runner_pool "$runner_pool" \
172-
'.config[.config| length] |= . + { "name": "Xcode 16.1", "xcode_version": "16.1", "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
196+
'.config[.config| length] |= . + { "name": "Xcode 16.1", "xcode_version": "16.1", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
173197
fi
174198
175199
if [[ "$xcode_16_2_enabled" == "true" ]]; then
176200
matrix=$(echo "$matrix" | jq -c \
201+
--arg setup_command "$xcode_16_2_setup_command" \
177202
--arg build_arguments_override "$xcode_16_2_build_arguments_override" \
178203
--arg test_arguments_override "$xcode_16_2_test_arguments_override" \
179204
--arg runner_pool "$runner_pool" \
180-
'.config[.config| length] |= . + { "name": "Xcode 16.2", "xcode_version": "16.2", "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
205+
'.config[.config| length] |= . + { "name": "Xcode 16.2", "xcode_version": "16.2", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
181206
fi
182207
183208
if [[ "$xcode_16_3_enabled" == "true" ]]; then
184209
matrix=$(echo "$matrix" | jq -c \
210+
--arg setup_command "$xcode_16_3_setup_command" \
185211
--arg build_arguments_override "$xcode_16_3_build_arguments_override" \
186212
--arg test_arguments_override "$xcode_16_3_test_arguments_override" \
187213
--arg runner_pool "$runner_pool" \
188-
'.config[.config| length] |= . + { "name": "Xcode 16.3", "xcode_version": "16.3", "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
214+
'.config[.config| length] |= . + { "name": "Xcode 16.3", "xcode_version": "16.3", "setup_command": $setup_command, "build_arguments_override": $build_arguments_override, "test_arguments_override": $test_arguments_override, "os": "sequoia", "arch": "ARM64", "pool": $runner_pool }')
189215
fi
190216
191217
echo "$matrix" | jq -c
@@ -196,18 +222,23 @@ jobs:
196222
MATRIX_MACOS_15_4_ENABLED: ${{ inputs.xcode_15_4_enabled }}
197223
MATRIX_MACOS_15_4_BUILD_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_15_4_build_arguments_override }}
198224
MATRIX_MACOS_15_4_TEST_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_15_4_test_arguments_override }}
225+
MATRIX_MACOS_15_4_SETUP_COMMAND: ${{ inputs.xcode_15_4_setup_command }}
199226
MATRIX_MACOS_16_0_ENABLED: ${{ inputs.xcode_16_0_enabled }}
200227
MATRIX_MACOS_16_0_BUILD_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_0_build_arguments_override }}
201228
MATRIX_MACOS_16_0_TEST_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_0_test_arguments_override }}
229+
MATRIX_MACOS_16_0_SETUP_COMMAND: ${{ inputs.xcode_16_0_setup_command }}
202230
MATRIX_MACOS_16_1_ENABLED: ${{ inputs.xcode_16_1_enabled }}
203231
MATRIX_MACOS_16_1_BUILD_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_1_build_arguments_override }}
204232
MATRIX_MACOS_16_1_TEST_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_1_test_arguments_override }}
233+
MATRIX_MACOS_16_1_SETUP_COMMAND: ${{ inputs.xcode_16_1_setup_command }}
205234
MATRIX_MACOS_16_2_ENABLED: ${{ inputs.xcode_16_2_enabled }}
206235
MATRIX_MACOS_16_2_BUILD_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_2_build_arguments_override }}
207236
MATRIX_MACOS_16_2_TEST_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_2_test_arguments_override }}
237+
MATRIX_MACOS_16_2_SETUP_COMMAND: ${{ inputs.xcode_16_2_setup_command }}
208238
MATRIX_MACOS_16_3_ENABLED: ${{ inputs.xcode_16_3_enabled }}
209239
MATRIX_MACOS_16_3_BUILD_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_3_build_arguments_override }}
210240
MATRIX_MACOS_16_3_TEST_ARGUMENTS_OVERRIDE: ${{ inputs.xcode_16_3_test_arguments_override }}
241+
MATRIX_MACOS_16_3_SETUP_COMMAND: ${{ inputs.xcode_16_3_setup_command }}
211242

212243
darwin-job:
213244
name: ${{ matrix.config.name }}
@@ -222,6 +253,11 @@ jobs:
222253
with:
223254
persist-credentials: false
224255
submodules: true
256+
- name: Setup command
257+
run: |
258+
if [ -n "${{ matrix.config.setup_command }}" ]; then
259+
bash -c "${{ matrix.config.setup_command }}"
260+
fi
225261
- name: Swift build
226262
run: |
227263
if [ -n "${{ matrix.config.build_arguments_override }}" ]; then

0 commit comments

Comments
 (0)