|
53 | 53 | linux_host_archs: |
54 | 54 | type: string |
55 | 55 | description: "Linux arch list (JSON)" |
56 | | - default: "[\"x86_64\"]" |
| 56 | + default: "[\"x86_64\", \"aarch64\"]" |
| 57 | + linux_exclude_host_archs: |
| 58 | + type: string |
| 59 | + description: "Exclude Linux arch list (JSON)" |
| 60 | + default: "[{\"arch\": \"aarch64\"}]" |
57 | 61 | linux_static_sdk_versions: |
58 | 62 | type: string |
59 | 63 | description: "Static Linux Swift SDK version list (JSON)" |
@@ -302,25 +306,43 @@ jobs: |
302 | 306 | run: ${{ inputs.ios_build_command }} ${{ (contains(matrix.swift_version, 'nightly') && inputs.swift_nightly_flags) || inputs.swift_flags }} |
303 | 307 | timeout-minutes: 60 |
304 | 308 |
|
| 309 | + define-matrix: |
| 310 | + runs-on: ubuntu-latest |
| 311 | + outputs: |
| 312 | + matrix_json: ${{ steps.set-matrix.outputs.matrix_json }} |
| 313 | + steps: |
| 314 | + - id: set-matrix |
| 315 | + run: | |
| 316 | + SWIFTS=($(echo '${{ github.event.inputs.linux_swift_versions }}' | jq -r '.[]')) |
| 317 | + OSS=($(echo '${{ github.event.inputs.linux_os_versions }}' | jq -r '.[]')) |
| 318 | + ARCHES=($(echo '${{ github.event.inputs.linux_host_archs }}' | jq -r '.[]')) |
| 319 | +
|
| 320 | + MATRIX=() |
| 321 | + for s in "${SWIFTS[@]}"; do |
| 322 | + for o in "${OSS[@]}"; do |
| 323 | + for a in "${ARCHES[@]}"; do |
| 324 | + case $a in |
| 325 | + x86_64) runner="ubuntu-24.04" ;; |
| 326 | + aarch64) runner="ubuntu-24.04-arm" ;; |
| 327 | + *) runner="ubuntu-24.04" ;; |
| 328 | + esac |
| 329 | + MATRIX+=("$(jq -nc --arg s "$s" --arg o "$o" --arg a "$a" --arg r "$runner" \ |
| 330 | + '{swift_version:$s,os_version:$o,arch:$a,runner:$r}')") |
| 331 | + done |
| 332 | + done |
| 333 | + done |
| 334 | +
|
| 335 | + # Combine array elements into JSON array |
| 336 | + MATRIX_JSON=$(jq -nc '$ARGS.positional' --args "${MATRIX[@]}") |
| 337 | + echo "matrix_json=$MATRIX_JSON" >> $GITHUB_OUTPUT |
| 338 | +
|
305 | 339 | linux-build: |
306 | 340 | name: Linux (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }}) |
| 341 | + needs: define-matrix |
307 | 342 | runs-on: ${{ matrix.runner }} |
308 | 343 | strategy: |
309 | 344 | fail-fast: false |
310 | | - matrix: |
311 | | - swift_version: ${{ fromJson(inputs.linux_swift_versions) }} |
312 | | - os_version: ${{ fromJson(inputs.linux_os_versions) }} |
313 | | - arch: ${{ fromJson(inputs.linux_host_archs) }} |
314 | | - exclude: |
315 | | - - ${{ fromJson(inputs.linux_exclude_swift_versions) }} |
316 | | - - ${{ fromJson((!inputs.enable_linux_checks && inputs.linux_swift_versions) || '[]') }} |
317 | | - - ${{ fromJson((!inputs.enable_linux_checks && inputs.linux_os_versions) || '[]') }} |
318 | | - - ${{ fromJson((!inputs.enable_linux_checks && inputs.linux_host_archs) || '[]') }} |
319 | | - include: |
320 | | - - arch: x86_64 |
321 | | - runner: ubuntu-24.04 |
322 | | - - arch: aarch64 |
323 | | - runner: ubuntu-24.04-arm |
| 345 | + matrix: ${{ fromJson(needs.define-matrix.outputs.matrix_json) }} |
324 | 346 | container: |
325 | 347 | image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} |
326 | 348 | steps: |
@@ -378,23 +400,21 @@ jobs: |
378 | 400 |
|
379 | 401 | linux-static-sdk-build: |
380 | 402 | name: Static Linux Swift SDK Build (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }}) |
| 403 | + needs: define-matrix |
381 | 404 | runs-on: ${{ matrix.runner }} |
382 | 405 | strategy: |
383 | 406 | fail-fast: false |
384 | 407 | matrix: |
385 | 408 | swift_version: ${{ fromJson(inputs.linux_static_sdk_versions) }} |
386 | 409 | os_version: ${{ fromJson(inputs.linux_os_versions) }} |
387 | 410 | arch: ${{ fromJson(inputs.linux_host_archs) }} |
| 411 | + include: ${{ fromJson(needs.define-matrix.outputs.matrix_json) }} |
388 | 412 | exclude: |
389 | 413 | - ${{ fromJson(inputs.linux_static_sdk_exclude_swift_versions) }} |
| 414 | + - ${{ fromJson(inputs.linux_exclude_host_archs) }} |
390 | 415 | - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_static_sdk_versions) || '[]') }} |
391 | 416 | - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_os_versions) || '[]') }} |
392 | 417 | - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_host_archs) || '[]') }} |
393 | | - include: |
394 | | - - arch: x86_64 |
395 | | - runner: ubuntu-24.04 |
396 | | - - arch: aarch64 |
397 | | - runner: ubuntu-24.04-arm |
398 | 418 | container: |
399 | 419 | image: ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }} |
400 | 420 | steps: |
|
0 commit comments