ci: share Python coverage configuration with XML reporting

This commit is contained in:
skylar taylor-barrick
2026-10-26 04:34:35 +01:00
parent aa4e4ff91f
commit d0a11726cb
2 changed files with 13 additions and 6 deletions
+7 -2
View File
@@ -380,9 +380,14 @@ jobs:
python3 -m venv "$coverage_env"
"$coverage_env/bin/python" -m pip install --disable-pip-version-check coverage==7.10.7
export COVERAGE_FILE="$coverage_env/.coverage"
export PYTHON_COVERAGE_SOURCE_REAL="$source_dir"
export PYTHON_COVERAGE_SCRIPT_REAL="$test_script"
coverage_config="$coverage_env/coverage.ini"
# Environment substitution keeps paths literal and shares selection with reporting.
printf '%s\n' '[run]' 'branch = true' 'source = ${PYTHON_COVERAGE_SOURCE_REAL}' 'omit = ${PYTHON_COVERAGE_SCRIPT_REAL}' > "$coverage_config"
status=0
"$coverage_env/bin/python" -m coverage run --rcfile=/dev/null --branch --source="$source_dir" --omit="$test_script" "$test_script" || status=$?
"$coverage_env/bin/python" -m coverage xml --rcfile=/dev/null -o python-coverage.xml
"$coverage_env/bin/python" -m coverage run --rcfile="$coverage_config" "$test_script" || status=$?
"$coverage_env/bin/python" -m coverage xml --rcfile="$coverage_config" -o python-coverage.xml
exit "$status"
- name: SonarCloud Scan
if: steps.token.outputs.available == 'true'
+6 -4
View File
@@ -63,7 +63,7 @@ else:
self.assertEqual(result.returncode, 0, result.stderr)
run = next(args for args in calls if args[:3] == ['-m', 'coverage', 'run'])
self.assertEqual(run[-1], script)
self.assertIn('--omit=' + script, run)
self.assertEqual(len([arg for arg in run if arg.startswith('--rcfile=')]), 1)
def test_failed_tests_still_generate_report_but_fail_job(self):
result, calls, _ = self.run_coverage(test_status=7)
@@ -97,9 +97,11 @@ else:
self.assertEqual(result.returncode, 0, result.stderr)
run = next(args for args in calls if args[:3] == ['-m', 'coverage', 'run'])
report = next(args for args in calls if args[:3] == ['-m', 'coverage', 'xml'])
self.assertIn('--source=' + str(Path(script).parent), run)
self.assertIn('--rcfile=/dev/null', run)
self.assertEqual(report, ['-m', 'coverage', 'xml', '--rcfile=/dev/null', '-o', 'python-coverage.xml'])
config = next(arg for arg in run if arg.startswith('--rcfile='))
self.assertNotEqual(config, '--rcfile=/dev/null')
self.assertEqual(report, ['-m', 'coverage', 'xml', config, '-o', 'python-coverage.xml'])
self.assertIn('source = ${PYTHON_COVERAGE_SOURCE_REAL}', self.step['run'])
self.assertIn('omit = ${PYTHON_COVERAGE_SCRIPT_REAL}', self.step['run'])
def test_failure_is_not_suppressed_and_step_precedes_scan(self):
self.assertNotIn('continue-on-error', self.step)