Repository navigation
ci: test runs are not dark — timestamped host start, live test output, long-running detection - #2789
Conversation
…, long-running detection Maintainer, 2026-08-30: 'we are completely in the dark in the test runs'. The shard ran the xunit v3 host as 'dotnet <suite>.dll -trx …', whose default reporter prints nothing per test until the summary, so a seven-minute shard was a blank job log until it ended — and the archived-log API returns BlobNotFound for an in-progress job besides. Now each host is preceded by '[CI] HH:MM:SS ▶ <suite> starting (N classes)', runs with -showLiveOutput (the test bases' TEST START / TEST END lines stream as they happen) and -longRunning 60 (any test still running after 60 s is named WHILE it runs), so a wedge reads in the log before the 8 m cap kills the host. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HWc8YSndL2gpW2i9wRUQWt
There was a problem hiding this comment.
Pull request overview
This PR updates the .github/workflows/dotnet-test.yml workflow to make xUnit v3 shard runs observable while they’re in progress (timestamped host start + live per-test output + long-running test reporting), addressing the “dark” CI logs problem during long or wedged test runs.
Changes:
- Emit a timestamped “[CI] … starting …” line before each test host launch.
- Run the xUnit v3 host with
-showLiveOutputand-longRunning 60to stream test progress and surface wedged tests sooner.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| # bases' TEST START / TEST END lines as they happen instead of holding them for the file, | ||
| # and -longRunning names any test still running after 60s WHILE it runs — so a wedge is | ||
| # readable in the job log before the 8m cap kills the host. | ||
| echo "[CI] $(date -u +%H:%M:%S) ▶ $label starting (${#classargs[@]:-all} class(es))" |
Test Results (shard 5)1 547 tests 1 547 ✅ 6m 39s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
Test Results (shard 4) 10 files 10 suites 5m 39s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
Test Results (shard 1)971 tests 967 ✅ 6m 4s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
Test Results (shard 3)730 tests 538 ✅ 4m 57s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
Test Results (shard 2)803 tests 803 ✅ 6m 40s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
Test Results (shard 0)951 tests 951 ✅ 5m 26s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
Test Results 41 files 41 suites 35m 26s ⏱️ Results for commit 1f0325c. ♻️ This comment has been updated with latest results. |
…d the step before the host ran
'${#classargs[@]:-all}' is a bad substitution in bash; under set -e the shard step died on the
echo, no host ran, no trx was written, and Consolidate refused the run — correctly ('a shard that
never ran is an unverifiable outcome'). Run 33317460014.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HWc8YSndL2gpW2i9wRUQWt
Maintainer (2026-08-30): "we are completely in the dark in the test runs".
The shard ran the xunit v3 host with the default reporter, which prints nothing per test until the summary — a 7-minute shard was a blank log until it ended (and the archived-log API returns
BlobNotFoundfor an in-progress job).Now each host prints
[CI] HH:MM:SS ▶ <suite> starting (N classes), runs with-showLiveOutput(the test bases'TEST START/TEST ENDlines stream live) and-longRunning 60(any test still running after 60 s is named while it runs), so a wedge is readable in the job log before the 8 m cap kills the host. Flags verified against the host's own-?.🤖 Generated with Claude Code