@@ -4,22 +4,26 @@ set -euo pipefail
44# Builds a dynamic GitHub Actions matrix for run-samples.yml.
55# Usage: build-matrix.sh <run_mode> [base_sha]
66
7+ # "all" runs every test; "changed" only runs tests whose watch_folders have modified files
78RUN_MODE=" ${1:- all} "
89BASE_SHA=" ${2:- } "
910
11+ # Get JSON metadata for all tests from run-samples.sh --list
1012chmod +x ./run-samples.sh
1113TEST_META=$( ./run-samples.sh --list)
1214TOTAL=$( echo " $TEST_META " | jq length)
1315echo " Run mode: $RUN_MODE | Total tests: $TOTAL "
1416
17+ # Changes to these files affect all tests, so any modification triggers a full run
1518INFRA_FILES=" run-samples.sh Makefile .github/workflows/run-samples.yml .github/scripts/build-matrix.sh pyproject.toml requirements-dev.txt requirements-runtime.txt"
1619
1720if [[ " $RUN_MODE " == " changed" && -n " $BASE_SHA " ]]; then
21+ # Get list of files changed between base branch and current HEAD
1822 CHANGED=$( git diff --name-only " $BASE_SHA " ..HEAD || true)
1923 echo " Changed files:"
2024 echo " $CHANGED "
2125
22- # If any infrastructure file changed, run all tests
26+ # Safety net: if any infrastructure file changed, run all tests
2327 RUN_ALL=false
2428 for f in $INFRA_FILES ; do
2529 if echo " $CHANGED " | grep -qF " $f " ; then
@@ -31,6 +35,7 @@ if [[ "$RUN_MODE" == "changed" && -n "$BASE_SHA" ]]; then
3135 if [[ " $RUN_ALL " == " true" ]]; then
3236 INDICES=$( seq 0 $(( TOTAL- 1 )) )
3337 else
38+ # Match changed files against each test's watch_folders using prefix matching
3439 INDICES=" "
3540 for (( i= 0 ; i< TOTAL; i++ )) ; do
3641 mapfile -t folders < <( echo " $TEST_META " | jq -r " .[$i ].watch_folders[]" )
@@ -43,15 +48,18 @@ if [[ "$RUN_MODE" == "changed" && -n "$BASE_SHA" ]]; then
4348 INDICES=$( echo " $INDICES " | xargs)
4449 fi
4550else
51+ # "all" mode: select every test
4652 INDICES=$( seq 0 $(( TOTAL- 1 )) )
4753fi
4854
55+ # Output the matrix JSON for GitHub Actions
4956if [[ -z " ${INDICES:- } " ]]; then
5057 echo " No tests to run."
5158 echo " has_tests=false" >> " $GITHUB_OUTPUT "
5259 echo ' matrix={"include":[]}' >> " $GITHUB_OUTPUT "
5360else
5461 echo " has_tests=true" >> " $GITHUB_OUTPUT "
62+ # Convert space-separated indices to JSON array, then build the matrix object
5563 IDX_JSON=$( echo " $INDICES " | tr ' ' ' \n' | jq -R ' tonumber' | jq -s ' .' )
5664 MATRIX=$( echo " $TEST_META " | jq -c --argjson idx " $IDX_JSON " \
5765 ' {include: [$idx[] as $i | .[$i] | {shard, splits, name}]}' )
0 commit comments