@@ -302,25 +302,52 @@ 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+ if [[ ${{ inputs.enable_linux_checks }} == true ]] ; then
318+ for s in "${SWIFTS[@]}"; do
319+ for o in "${OSS[@]}"; do
320+ for a in "${ARCHES[@]}"; do
321+ case $a in
322+ x86_64) runner="ubuntu-24.04" ;;
323+ aarch64) runner="ubuntu-24.04-arm" ;;
324+ *) runner="ubuntu-24.04" ;;
325+ esac
326+ MATRIX+=("$(jq -nc --arg s "$s" --arg o "$o" --arg a "$a" --arg r "$runner" \
327+ '{swift_version:$s,os_version:$o,arch:$a,runner:$r}')")
328+ done
329+ done
330+ done
331+ fi
332+
333+ # Combine array elements into JSON array
334+ MATRIX_JSON=$(printf '%s\n' "${MATRIX[@]}" | jq -s -c '.')
335+ echo "matrix_json=$MATRIX_JSON" >> $GITHUB_OUTPUT
336+
337+ test :
338+ needs : define-matrix
339+ runs-on : ubuntu-latest
340+ steps :
341+ - name : Debug
342+ run : jq ${{ fromJson(needs.define-matrix.outputs.matrix_json) }}
343+
305344 linux-build :
306345 name : Linux (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }})
346+ needs : define-matrix
307347 runs-on : ${{ matrix.runner }}
308348 strategy :
309349 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
350+ matrix : ${{ needs.define-matrix.outputs.matrix_json }}
324351 container :
325352 image : ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}
326353 steps :
@@ -378,23 +405,11 @@ jobs:
378405
379406 linux-static-sdk-build :
380407 name : Static Linux Swift SDK Build (${{ matrix.swift_version }} - ${{ matrix.os_version }} - ${{ matrix.arch }})
408+ needs : define-matrix
381409 runs-on : ${{ matrix.runner }}
382410 strategy :
383411 fail-fast : false
384- matrix :
385- swift_version : ${{ fromJson(inputs.linux_static_sdk_versions) }}
386- os_version : ${{ fromJson(inputs.linux_os_versions) }}
387- arch : ${{ fromJson(inputs.linux_host_archs) }}
388- exclude :
389- - ${{ fromJson(inputs.linux_static_sdk_exclude_swift_versions) }}
390- - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_static_sdk_versions) || '[]') }}
391- - ${{ fromJson((!inputs.enable_linux_static_sdk_build && inputs.linux_os_versions) || '[]') }}
392- - ${{ 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
412+ matrix : ${{ needs.define-matrix.outputs.matrix_json }}
398413 container :
399414 image : ${{ (contains(matrix.swift_version, 'nightly') && 'swiftlang/swift') || 'swift' }}:${{ matrix.swift_version }}-${{ matrix.os_version }}
400415 steps :
0 commit comments