@@ -350,21 +350,36 @@ jobs:
350350 --junitxml=junit.xml \
351351 -o junit_family=legacy
352352
353- # Coverage parallel mode creates multiple .coverage.* files, combine them
354- shopt -s nullglob
355- coverage_files=(.coverage.*)
353+ # Debug: Check what coverage files exist
354+ echo "=== Coverage files after pytest ==="
355+ ls -la .coverage* 2>/dev/null || echo "No .coverage* files found"
356+ ls -la .coverage.* 2>/dev/null || echo "No .coverage.* files found"
356357
357- if [ ${#coverage_files[@]} -eq 0 ]; then
358- echo "Error: No coverage data generated"
359- echo "coverage_generated=false" >> $GITHUB_OUTPUT
360- exit 1
358+ # Coverage parallel mode may create .coverage.machine.pid files
359+ # Check for both .coverage and .coverage.* patterns
360+ if [ -f ".coverage" ]; then
361+ # Single .coverage file exists (parallel mode auto-combined or not used)
362+ mv .coverage .coverage.${PYTHON_VERSION}
363+ echo "Renamed .coverage to .coverage.${PYTHON_VERSION}"
364+ echo "coverage_generated=true" >> $GITHUB_OUTPUT
365+ else
366+ # Check for parallel coverage files
367+ shopt -s nullglob
368+ coverage_files=(.coverage.*)
369+
370+ if [ ${#coverage_files[@]} -gt 0 ]; then
371+ echo "Found ${#coverage_files[@]} parallel coverage files, combining..."
372+ poetry run coverage combine
373+ mv .coverage .coverage.${PYTHON_VERSION}
374+ echo "Combined and saved as .coverage.${PYTHON_VERSION}"
375+ echo "coverage_generated=true" >> $GITHUB_OUTPUT
376+ else
377+ echo "Error: No coverage data files found"
378+ echo "coverage_generated=false" >> $GITHUB_OUTPUT
379+ exit 1
380+ fi
361381 fi
362382
363- poetry run coverage combine
364- mv .coverage .coverage.${PYTHON_VERSION}
365- echo "Coverage saved as .coverage.${PYTHON_VERSION}"
366- echo "coverage_generated=true" >> $GITHUB_OUTPUT
367-
368383 - name : Per-version coverage summary
369384 if : steps.test-unit.outputs.coverage_generated == 'true'
370385 env :
0 commit comments