mirror of
https://github.com/elder-plinius/OBLITERATUS.git
synced 2026-08-18 00:47:23 +02:00
61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
"""Fail-closed mutmut prepared-artifact reuse hooks for CI."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
|
|
if (
|
|
os.environ.get("OBLITERATUS_MUTMUT_REUSE_COVERAGE") == "1"
|
|
or os.environ.get("OBLITERATUS_MUTMUT_REUSE_STATS") == "1"
|
|
or os.environ.get("OBLITERATUS_MUTMUT_SUBPROCESS_PREFLIGHT") == "1"
|
|
):
|
|
from mutmut import __main__ as mutmut_main
|
|
|
|
from scripts.prepare_mutation_coverage import validate_execution_manifest
|
|
from scripts.prepare_mutation_coverage import validate_manifest
|
|
|
|
def store_lines_covered_by_tests_from_prepared_artifacts() -> None:
|
|
validate_manifest()
|
|
print("Reusing prepared mutmut covered-line artifacts")
|
|
|
|
mutmut_main.store_lines_covered_by_tests = store_lines_covered_by_tests_from_prepared_artifacts
|
|
|
|
if os.environ.get("OBLITERATUS_MUTMUT_REUSE_STATS") == "1":
|
|
|
|
def collect_or_load_prepared_stats(
|
|
runner,
|
|
*,
|
|
mutants_caught_by_type_checker=None,
|
|
apply_config_invalidation=False,
|
|
invalidate_stale_callers=True,
|
|
) -> None:
|
|
del runner, mutants_caught_by_type_checker
|
|
del apply_config_invalidation, invalidate_stale_callers
|
|
validate_execution_manifest()
|
|
if not mutmut_main.load_stats():
|
|
raise RuntimeError("prepared mutmut stats failed to load")
|
|
print("Reusing prepared mutmut test-selection stats")
|
|
|
|
mutmut_main.collect_or_load_stats = collect_or_load_prepared_stats
|
|
|
|
if os.environ.get("OBLITERATUS_MUTMUT_SUBPROCESS_PREFLIGHT") == "1":
|
|
_original_execute_pytest = mutmut_main.PytestRunner.execute_pytest
|
|
|
|
def execute_pytest_with_subprocess_preflight(self, params, **kwargs):
|
|
if kwargs:
|
|
return _original_execute_pytest(self, params, **kwargs)
|
|
if os.environ.get("MUTANT_UNDER_TEST") not in {"", "fail"}:
|
|
return _original_execute_pytest(self, params, **kwargs)
|
|
|
|
import subprocess
|
|
import sys
|
|
|
|
full_params = ["--rootdir=.", "--tb=native", *params, *self._pytest_add_cli_args]
|
|
result = subprocess.run([sys.executable, "-m", "pytest", *full_params], check=False)
|
|
if result.returncode == 4:
|
|
raise mutmut_main.BadTestExecutionCommandsException(full_params)
|
|
return int(result.returncode)
|
|
|
|
mutmut_main.PytestRunner.execute_pytest = execute_pytest_with_subprocess_preflight
|