Skip to content

Commit fccf6a7

Browse files
authored
Merge pull request #60 from adobe/fix-eval-polling
fix: wait for async eval completion with polling
2 parents b5f9026 + b304ee5 commit fccf6a7

File tree

1 file changed

+84
-8
lines changed

1 file changed

+84
-8
lines changed

.github/workflows/tessl-eval.yml

Lines changed: 84 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)