@@ -350,43 +350,21 @@ jobs:
350350 --junitxml=junit.xml \
351351 -o junit_family=legacy
352352
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"
357-
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
353+ # Check if coverage data was generated
354+ if [ ! -f ".coverage" ]; then
355+ echo "Error: No coverage data file generated"
356+ echo "coverage_generated=false" >> $GITHUB_OUTPUT
357+ exit 1
381358 fi
359+
360+ echo "Coverage data generated successfully"
361+ echo "coverage_generated=true" >> $GITHUB_OUTPUT
382362
383363 - name : Per-version coverage summary
384364 if : steps.test-unit.outputs.coverage_generated == 'true'
385- env :
386- PYTHON_VERSION : ${{ matrix.python-version }}
387365 run : |
388- echo "## Python ${PYTHON_VERSION } Coverage" >> $GITHUB_STEP_SUMMARY
389- poetry run coverage report --data-file=.coverage.${PYTHON_VERSION} -- format=markdown >> $GITHUB_STEP_SUMMARY
366+ echo "## Python ${{ matrix.python-version } } Coverage" >> $GITHUB_STEP_SUMMARY
367+ poetry run coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
390368
391369 - name : Upload test results to Codecov (these are results not coverage reports)
392370 if : ${{ !cancelled() }}
@@ -400,7 +378,7 @@ jobs:
400378 uses : actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
401379 with :
402380 name : coverage-${{ matrix.python-version }}
403- path : .coverage.${{ matrix.python-version }}
381+ path : .coverage
404382 retention-days : 1
405383
406384 coverage-combine :
@@ -433,13 +411,9 @@ jobs:
433411 run : |
434412 set -euo pipefail
435413
436- # List downloaded artifacts structure
437- echo "=== Downloaded artifacts structure ==="
438- find coverage-artifacts -type f -name ".coverage.*" || echo "No .coverage.* files found"
439-
440- # Collect all coverage files from artifact subdirectories
414+ # Collect all .coverage files from artifact subdirectories
441415 shopt -s nullglob
442- coverage_files=(coverage-artifacts/*/.coverage.* )
416+ coverage_files=(coverage-artifacts/*/.coverage)
443417
444418 if [ ${#coverage_files[@]} -eq 0 ]; then
445419 echo "No coverage files to combine (tests may have failed)"
@@ -449,10 +423,12 @@ jobs:
449423
450424 echo "Found ${#coverage_files[@]} coverage file(s) to combine"
451425
452- # Copy all coverage files to a single directory for combining
426+ # Rename each file to include a unique suffix for coverage combine
453427 mkdir -p coverage-data
428+ i=0
454429 for file in "${coverage_files[@]}"; do
455- cp "$file" coverage-data/
430+ cp "$file" "coverage-data/.coverage.$i"
431+ ((i++))
456432 done
457433
458434 cd coverage-data
0 commit comments