@@ -135,7 +135,22 @@ jobs:
135135 echo "TEST_NODEIDS=${TEST_NODEIDS}"
136136 # Save PR-selected nodeids for reuse after checkout (if provided)
137137 if [ "${TEST_MODE}" = "selected" ] && [ -n "${TEST_NODEIDS}" ]; then
138- printf "%s\n" ${TEST_NODEIDS} > /tmp/pr_selected_nodeids.txt
138+ python -c 'import json, os
139+ raw = os.environ.get("TEST_NODEIDS", "").strip()
140+ nodeids = []
141+ if raw and raw != "[]" :
142+ try :
143+ parsed = json.loads(raw)
144+ except json.JSONDecodeError :
145+ parsed = raw.split()
146+ if isinstance(parsed, str) :
147+ parsed = [parsed]
148+ if isinstance(parsed, list) :
149+ nodeids = [item for item in parsed if isinstance(item, str) and item]
150+ with open("/tmp/pr_selected_nodeids.txt", "w", encoding="utf-8") as fh :
151+ for nodeid in nodeids :
152+ fh.write(f"{nodeid}\n")
153+ print(f"Selected nodeids parsed : {len(nodeids)}")'
139154 else
140155 : > /tmp/pr_selected_nodeids.txt
141156 fi
@@ -152,26 +167,22 @@ jobs:
152167 python -c "import ultraplot as plt; plt.config.Configurator()._save_yaml('ultraplot.yml')"
153168 if [ "${TEST_MODE}" = "selected" ] && [ -s /tmp/pr_selected_nodeids.txt ]; then
154169 status=0
155- filter_nodeids() {
156- local filtered=""
157- for nodeid in $(cat /tmp/pr_selected_nodeids.txt); do
158- local path="${nodeid%%::*}"
159- if [ -f "$path" ]; then
160- filtered="${filtered} ${nodeid}"
161- fi
162- done
163- echo "${filtered}"
164- }
165- FILTERED_NODEIDS="$(filter_nodeids)"
166- echo "FILTERED_NODEIDS_BASE=${FILTERED_NODEIDS}"
167- if [ -z "${FILTERED_NODEIDS}" ]; then
170+ mapfile -t FILTERED_NODEIDS < <(
171+ while IFS= read -r nodeid; do
172+ [ -z "$nodeid" ] && continue
173+ path="${nodeid%%::*}"
174+ [ -f "$path" ] && printf '%s\n' "$nodeid"
175+ done < /tmp/pr_selected_nodeids.txt
176+ )
177+ echo "FILTERED_NODEIDS_BASE_COUNT=${#FILTERED_NODEIDS[@]}"
178+ if [ "${#FILTERED_NODEIDS[@]}" -eq 0 ]; then
168179 echo "No valid nodeids found on base; skipping baseline generation."
169180 else
170181 echo "=== Memory before baseline generation ===" && free -h
171182 pytest -n ${PYTEST_WORKERS} --dist loadfile --tb=short --disable-warnings -W ignore \
172183 --mpl-generate-path=./ultraplot/tests/baseline/ \
173184 --mpl-default-style="./ultraplot.yml" \
174- ${FILTERED_NODEIDS} || status=$?
185+ " ${FILTERED_NODEIDS[@]} " || status=$?
175186 echo "=== Memory after baseline generation ===" && free -h
176187 if [ "$status" -eq 4 ] || [ "$status" -eq 5 ]; then
177188 echo "No tests collected from selected nodeids on base; skipping baseline generation."
@@ -213,19 +224,15 @@ jobs:
213224 echo "TEST_NODEIDS=${TEST_NODEIDS}"
214225 if [ "${TEST_MODE}" = "selected" ] && [ -s /tmp/pr_selected_nodeids.txt ]; then
215226 status=0
216- filter_nodeids() {
217- local filtered=""
218- for nodeid in $(cat /tmp/pr_selected_nodeids.txt); do
219- local path="${nodeid%%::*}"
220- if [ -f "$path" ]; then
221- filtered="${filtered} ${nodeid}"
222- fi
223- done
224- echo "${filtered}"
225- }
226- FILTERED_NODEIDS="$(filter_nodeids)"
227- echo "FILTERED_NODEIDS_PR=${FILTERED_NODEIDS}"
228- if [ -z "${FILTERED_NODEIDS}" ]; then
227+ mapfile -t FILTERED_NODEIDS < <(
228+ while IFS= read -r nodeid; do
229+ [ -z "$nodeid" ] && continue
230+ path="${nodeid%%::*}"
231+ [ -f "$path" ] && printf '%s\n' "$nodeid"
232+ done < /tmp/pr_selected_nodeids.txt
233+ )
234+ echo "FILTERED_NODEIDS_PR_COUNT=${#FILTERED_NODEIDS[@]}"
235+ if [ "${#FILTERED_NODEIDS[@]}" -eq 0 ]; then
229236 echo "No valid nodeids found on PR branch; skipping image comparison."
230237 exit 0
231238 else
@@ -236,7 +243,7 @@ jobs:
236243 --mpl-results-path=./results/ \
237244 --mpl-generate-summary=html \
238245 --mpl-default-style="./ultraplot.yml" \
239- ${FILTERED_NODEIDS} || status=$?
246+ " ${FILTERED_NODEIDS[@]}" || status=$?
240247 echo "=== Memory after image comparison ===" && free -h
241248 if [ "$status" -eq 4 ] || [ "$status" -eq 5 ]; then
242249 echo "No tests collected from selected nodeids; skipping image comparison."
0 commit comments