@@ -302,25 +302,43 @@ jobs:
302302 run : ${{ inputs.ios_build_command }} ${{ (contains(matrix.swift_version, 'nightly') && inputs.swift_nightly_flags) || inputs.swift_flags }}
303303 timeout-minutes : 60
304304
305+ define-matrix :
306+ runs-on : ubuntu-latest
307+ outputs :
308+ matrix_json : ${{ steps.set-matrix.outputs.matrix_json }}
309+ steps :
310+ - id : set-matrix
311+ run : |
312+ SWIFTS=($(echo '${{ github.event.inputs.linux_swift_versions }}' | jq -r '.[]'))
313+ OSS=($(echo '${{ github.event.inputs.linux_os_versions }}' | jq -r '.[]'))
314+ ARCHES=($(echo '${{ github.event.inputs.linux_host_archs }}' | jq -r '.[]'))
315+
316+ MATRIX=()
317+ for s in "${SWIFTS[@]}"; do
318+ for o in "${OSS[@]}"; do
319+ for a in "${ARCHES[@]}"; do
320+ case $a in
321+ x86_64) runner="ubuntu-24.04" ;;
322+ aarch64) runner="ubuntu-24.04-arm" ;;
323+ *) runner="ubuntu-24.04" ;;
324+ esac
325+ MATRIX+=("$(jq -nc --arg s "$s" --arg o "$o" --arg a "$a" --arg r "$runner" \
326+ '{swift_version:$s,os_version:$o,arch:$a,runner:$r}')")
327+ done
328+ done
329+ done
330+
331+ # Combine array elements into JSON array
332+ MATRIX_JSON=$(jq -nc '$ARGS.positional' --args "${MATRIX[@]}")
333+ echo "matrix_json=$MATRIX_JSON" >> $GITHUB_OUTPUT
334+
305335 linux-build :
306336 name : Linux (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }})
337+ needs : define-matrix
307338 runs-on : ${{ matrix.runner }}
308339 strategy :
309340 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
341+ matrix : ${{ fromJson(needs.define-matrix.outputs.matrix_json) }}
324342 container :
325343 image : ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}
326344 steps :
@@ -378,23 +396,20 @@ jobs:
378396
379397 linux-static-sdk-build :
380398 name : Static Linux Swift SDK Build (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }})
399+ needs : define-matrix
381400 runs-on : ${{ matrix.runner }}
382401 strategy :
383402 fail-fast : false
384403 matrix :
385404 swift_version : ${{ fromJson(inputs.linux_static_sdk_versions) }}
386405 os_version : ${{ fromJson(inputs.linux_os_versions) }}
387406 arch : ${{ fromJson(inputs.linux_host_archs) }}
407+ include : ${{ fromJson(needs.define-matrix.outputs.matrix_json) }}
388408 exclude :
389409 - ${{ fromJson(inputs.linux_static_sdk_exclude_swift_versions) }}
390410 - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_static_sdk_versions) || '[]') }}
391411 - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_os_versions) || '[]') }}
392412 - ${{ 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
398413 container :
399414 image : ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}
400415 steps :
0 commit comments