@@ -127,28 +127,99 @@ jobs:
127127 run : |
128128 PASS=0
129129 FAIL=0
130- SUMMARY_ROWS=""
130+ SUMMARY_FILE=$(mktemp)
131+ ERRORS_FILE=$(mktemp)
132+ STDOUT_TMP=$(mktemp)
133+ STDERR_TMP=$(mktemp)
134+ trap 'rm -f "$SUMMARY_FILE" "$ERRORS_FILE" "$STDOUT_TMP" "$STDERR_TMP"' EXIT
135+
136+ POLL_INTERVAL=30
137+ TIMEOUT=900
131138
132139 for tile_dir in ${{ steps.detect.outputs.dirs }}; do
133140 TILE_NAME=$(basename "$tile_dir")
134141 echo "::group::Evaluating $TILE_NAME ($tile_dir)"
135142
136143 EXIT_CODE=0
137- OUTPUT=$(tessl eval run "$tile_dir" 2>&1) || EXIT_CODE=$?
144+ OUTPUT=$(tessl eval run "$tile_dir" --workspace adobe 2>&1) || EXIT_CODE=$?
138145 echo "$OUTPUT"
139146 echo "::endgroup::"
140147
141148 if [ "$EXIT_CODE" -ne 0 ]; then
142149 echo "::warning::tessl eval run failed for $TILE_NAME (exit code $EXIT_CODE)"
143150 FAIL=$((FAIL + 1))
144- SUMMARY_ROWS="$SUMMARY_ROWS| $TILE_NAME | error | ❌ |\n"
145- else
151+ echo "| $TILE_NAME | error | ❌ |" >> "$SUMMARY_FILE"
152+ echo " ❌ $TILE_NAME: eval run failed (exit code $EXIT_CODE)" >> "$ERRORS_FILE"
153+ continue
154+ fi
155+
156+ # Extract run ID (UUID) from tessl eval run output
157+ RUN_ID=$(echo "$OUTPUT" | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' | head -1)
158+ if [ -z "$RUN_ID" ]; then
159+ echo "::warning::Could not extract run ID for $TILE_NAME"
160+ FAIL=$((FAIL + 1))
161+ echo "| $TILE_NAME | no run ID | ❌ |" >> "$SUMMARY_FILE"
162+ echo " ❌ $TILE_NAME: could not extract run ID from output" >> "$ERRORS_FILE"
163+ continue
164+ fi
165+
166+ echo "Eval run started for $TILE_NAME with run ID: $RUN_ID"
167+
168+ # Poll for completion
169+ ELAPSED=0
170+ EVAL_STATUS="unknown"
171+ while [ "$ELAPSED" -lt "$TIMEOUT" ]; do
172+ sleep "$POLL_INTERVAL"
173+ ELAPSED=$((ELAPSED + POLL_INTERVAL))
174+
175+ # Capture stdout and stderr separately to avoid breaking JSON parsing
176+ VIEW_EXIT=0
177+ tessl eval view "$RUN_ID" --json >"$STDOUT_TMP" 2>"$STDERR_TMP" || VIEW_EXIT=$?
178+
179+ if [ "$VIEW_EXIT" -ne 0 ]; then
180+ STDERR_CONTENT=$(cat "$STDERR_TMP")
181+ echo " [$TILE_NAME] tessl eval view exited $VIEW_EXIT: $STDERR_CONTENT"
182+ if echo "$STDERR_CONTENT" | grep -qi "not found"; then
183+ # Transient: run not yet visible, keep polling
184+ EVAL_STATUS="unknown"
185+ else
186+ # Permanent failure
187+ echo "::warning::tessl eval view failed for $TILE_NAME (exit $VIEW_EXIT): $STDERR_CONTENT"
188+ EVAL_STATUS="failed"
189+ break
190+ fi
191+ else
192+ EVAL_STATUS=$(python3 -c "import sys,json; print(json.load(sys.stdin)['data']['attributes']['status'])" <"$STDOUT_TMP" 2>/dev/null) || {
193+ echo " [$TILE_NAME] Warning: could not parse JSON from stdout"
194+ EVAL_STATUS="unknown"
195+ }
196+ fi
197+
198+ echo " [$TILE_NAME] Poll at ${ELAPSED}s: status=$EVAL_STATUS"
199+
200+ if [ "$EVAL_STATUS" = "completed" ] || [ "$EVAL_STATUS" = "failed" ]; then
201+ break
202+ fi
203+ done
204+
205+ if [ "$EVAL_STATUS" = "completed" ]; then
146206 PASS=$((PASS + 1))
147- SUMMARY_ROWS="$SUMMARY_ROWS| $TILE_NAME | passed | ✅ |\n"
148- # Show detailed results only for successful eval
207+ echo "| $TILE_NAME | passed | ✅ |" >> "$SUMMARY_FILE"
208+ echo "::group::Eval results for $TILE_NAME"
209+ tessl eval view "$RUN_ID" 2>&1 || true
210+ echo "::endgroup::"
211+ elif [ "$EVAL_STATUS" = "failed" ]; then
212+ FAIL=$((FAIL + 1))
213+ echo "| $TILE_NAME | failed | ❌ |" >> "$SUMMARY_FILE"
214+ echo " ❌ $TILE_NAME: eval failed" >> "$ERRORS_FILE"
149215 echo "::group::Eval results for $TILE_NAME"
150- tessl eval view --last 2>&1 || true
216+ tessl eval view "$RUN_ID" 2>&1 || true
151217 echo "::endgroup::"
218+ else
219+ FAIL=$((FAIL + 1))
220+ echo "| $TILE_NAME | timeout | ❌ |" >> "$SUMMARY_FILE"
221+ echo " ❌ $TILE_NAME: eval timed out after ${TIMEOUT}s (last status: $EVAL_STATUS)" >> "$ERRORS_FILE"
222+ echo "::warning::Eval for $TILE_NAME timed out after ${TIMEOUT}s (last status: $EVAL_STATUS)"
152223 fi
153224 done
154225
@@ -159,7 +230,7 @@ jobs:
159230 echo ""
160231 echo "| Tile | Result | Status |"
161232 echo "|------|--------|--------|"
162- echo -e "$SUMMARY_ROWS "
233+ cat "$SUMMARY_FILE "
163234 echo "| **Total** | **$PASS/$TOTAL passed** | $([ "$FAIL" -eq 0 ] && echo '✅' || echo '❌') |"
164235 } >> "$GITHUB_STEP_SUMMARY"
165236
@@ -170,6 +241,11 @@ jobs:
170241 echo " Total: $TOTAL"
171242 echo " Passed: $PASS"
172243 echo " Failed: $FAIL"
244+ if [ -s "$ERRORS_FILE" ]; then
245+ echo ""
246+ echo " Failed evals:"
247+ cat "$ERRORS_FILE"
248+ fi
173249 echo "============================="
174250
175251 if [ "$FAIL" -gt 0 ]; then
0 commit comments