@@ -302,25 +302,50 @@ 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 '${{ inputs.linux_swift_versions }}' | jq -r '.[]'))
313+ OSS=($(echo '${{ inputs.linux_os_versions }}' | jq -r '.[]'))
314+ ARCHES=($(echo '${{ 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+
335+ test :
336+ needs : define-matrix
337+ runs-on : ubuntu-latest
338+ steps :
339+ - name : Debug
340+ run : echo ${{ fromJson(needs.define-matrix.outputs.matrix_json) }}
341+
305342 linux-build :
306343 name : Linux (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }})
344+ needs : define-matrix
307345 runs-on : ${{ matrix.runner }}
308346 strategy :
309347 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
348+ matrix : ${{ fromJson(needs.define-matrix.outputs.matrix_json) }}
324349 container :
325350 image : ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}
326351 steps :
@@ -378,23 +403,20 @@ jobs:
378403
379404 linux-static-sdk-build :
380405 name : Static Linux Swift SDK Build (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }})
406+ needs : define-matrix
381407 runs-on : ${{ matrix.runner }}
382408 strategy :
383409 fail-fast : false
384410 matrix :
385411 swift_version : ${{ fromJson(inputs.linux_static_sdk_versions) }}
386412 os_version : ${{ fromJson(inputs.linux_os_versions) }}
387413 arch : ${{ fromJson(inputs.linux_host_archs) }}
414+ include : ${{ fromJson(needs.define-matrix.outputs.matrix_json) }}
388415 exclude :
389416 - ${{ fromJson(inputs.linux_static_sdk_exclude_swift_versions) }}
390417 - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_static_sdk_versions) || '[]') }}
391418 - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_os_versions) || '[]') }}
392419 - ${{ 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
398420 container :
399421 image : ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}
400422 steps :
0 commit comments