diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 12bee95..c7df48e 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -322,11 +322,14 @@ jobs: $failed = $false for ($i = 0; $i -lt $shards; $i++) { $log = "shard_${i}.log" - if (Select-String -Path $log -Pattern "\[ PASSED \]" -Quiet) { + $proc = $procs[$i] + $hasPassed = Select-String -Path $log -Pattern "\[ PASSED \]" -Quiet + $hasFailed = Select-String -Path $log -Pattern "\[ FAILED \]" -Quiet + if ($hasPassed -and -not $hasFailed -and $proc.ExitCode -eq 0) { $passed = (Select-String -Path $log -Pattern "\[ PASSED \]").Line Write-Host "Shard ${i}: $passed" } else { - Write-Host "=== Shard $i FAILED ===" + Write-Host "=== Shard $i FAILED (exit=$($proc.ExitCode)) ===" Get-Content $log if (Test-Path "${log}.err") { Get-Content "${log}.err" } $failed = $true diff --git a/test/Makefile b/test/Makefile index eb32bf1..23c94e6 100644 --- a/test/Makefile +++ b/test/Makefile @@ -67,24 +67,29 @@ SHARDS ?= 4 define run_parallel @echo "Running $(1) with $(SHARDS) shards in parallel..." - @fail=0; \ + @fail=0; pids=""; \ for i in $$(seq 0 $$(($(SHARDS) - 1))); do \ GTEST_TOTAL_SHARDS=$(SHARDS) GTEST_SHARD_INDEX=$$i \ LSAN_OPTIONS=suppressions=lsan_suppressions.txt \ $(SETARCH) ./$(1) --gtest_color=yes > $(1)_shard_$$i.log 2>&1 & \ + pids="$$pids $$!"; \ + done; \ + rc=0; \ + for pid in $$pids; do \ + if ! wait $$pid; then rc=1; fi; \ done; \ - wait; \ for i in $$(seq 0 $$(($(SHARDS) - 1))); do \ - if ! grep -q "\[ PASSED \]" $(1)_shard_$$i.log; then \ - echo "=== Shard $$i FAILED ==="; \ - cat $(1)_shard_$$i.log; \ - fail=1; \ - else \ - passed=$$(grep "\[ PASSED \]" $(1)_shard_$$i.log); \ + log=$(1)_shard_$$i.log; \ + if grep -q "\[ PASSED \]" $$log && ! grep -q "\[ FAILED \]" $$log; then \ + passed=$$(grep "\[ PASSED \]" $$log); \ echo "Shard $$i: $$passed"; \ + else \ + echo "=== Shard $$i FAILED ==="; \ + cat $$log; \ + fail=1; \ fi; \ done; \ - if [ $$fail -ne 0 ]; then exit 1; fi; \ + if [ $$fail -ne 0 ] || [ $$rc -ne 0 ]; then exit 1; fi; \ echo "All shards passed." endef