ci(ananke): accept expanded quality metric arguments
This commit is contained in:
parent
6dbb2ceead
commit
96040a3409
@ -18,6 +18,7 @@ DEFAULT_PUSHGATEWAY_URL = "http://platform-quality-gateway.monitoring.svc.cluste
|
||||
SOURCE_SCAN_ROOTS = ("cmd", "internal", "scripts", "testing")
|
||||
SOURCE_EXTENSIONS = {".go", ".py", ".sh"}
|
||||
QUALITY_SUCCESS_STATES = {"ok", "pass", "passed", "success", "compliant"}
|
||||
COVERAGE_GATE_PERCENT = 95.0
|
||||
|
||||
|
||||
def _escape_label(value: str) -> str:
|
||||
@ -208,6 +209,20 @@ def _supply_chain_check_status(build_dir: Path) -> str:
|
||||
return "failed"
|
||||
|
||||
|
||||
def _parse_check_overrides(raw_checks: list[str]) -> dict[str, str]:
|
||||
overrides: dict[str, str] = {}
|
||||
for entry in raw_checks:
|
||||
if ":" not in entry:
|
||||
continue
|
||||
check_name, check_status = entry.split(":", 1)
|
||||
check_name = check_name.strip()
|
||||
check_status = check_status.strip().lower()
|
||||
if not check_name or not check_status:
|
||||
continue
|
||||
overrides[check_name] = check_status
|
||||
return overrides
|
||||
|
||||
|
||||
def parse_args(argv: list[str]) -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument(
|
||||
@ -226,6 +241,13 @@ def parse_args(argv: list[str]) -> argparse.Namespace:
|
||||
"--coverage-percent-file",
|
||||
default=os.getenv("ANANKE_QUALITY_COVERAGE_PERCENT_FILE", "build/coverage-percent.txt"),
|
||||
)
|
||||
parser.add_argument("--tests-passed", type=int, default=None)
|
||||
parser.add_argument("--tests-failed", type=int, default=None)
|
||||
parser.add_argument("--tests-error", type=int, default=None)
|
||||
parser.add_argument("--tests-skipped", type=int, default=None)
|
||||
parser.add_argument("--coverage-percent", type=float, default=None)
|
||||
parser.add_argument("--source-lines-over-500", type=int, default=None)
|
||||
parser.add_argument("--check", action="append", default=[])
|
||||
parser.add_argument(
|
||||
"--timeout-seconds",
|
||||
type=float,
|
||||
@ -275,20 +297,36 @@ def main(argv: list[str] | None = None) -> int:
|
||||
|
||||
resolved_ok = max(args.local_ok, remote_ok)
|
||||
resolved_failed = max(args.local_failed, remote_failed)
|
||||
coverage_percent = _read_coverage_percent(args.coverage_percent_file)
|
||||
source_lines_over_500 = _count_source_files_over_limit(repo_root, max_lines=500)
|
||||
tests = _parse_go_test_counts(Path(os.getenv("ANANKE_QUALITY_OUTPUT_FILE", str(build_dir / "quality-gate.out"))))
|
||||
if args.tests_passed is not None:
|
||||
tests["passed"] = args.tests_passed
|
||||
if args.tests_failed is not None:
|
||||
tests["failed"] = args.tests_failed
|
||||
if args.tests_error is not None:
|
||||
tests["errors"] = args.tests_error
|
||||
if args.tests_skipped is not None:
|
||||
tests["skipped"] = args.tests_skipped
|
||||
|
||||
coverage_percent = _read_coverage_percent(args.coverage_percent_file)
|
||||
if args.coverage_percent is not None:
|
||||
coverage_percent = args.coverage_percent
|
||||
|
||||
source_lines_over_500 = _count_source_files_over_limit(repo_root, max_lines=500)
|
||||
if args.source_lines_over_500 is not None:
|
||||
source_lines_over_500 = args.source_lines_over_500
|
||||
|
||||
gate_rc = _read_exit_code(Path(os.getenv("ANANKE_QUALITY_EXIT_CODE_PATH", str(build_dir / "quality-gate.rc"))))
|
||||
gate_failed = gate_rc != 0
|
||||
checks = {
|
||||
"tests": "failed" if gate_failed or tests["failed"] > 0 else "ok",
|
||||
"coverage": "ok" if coverage_percent >= 95.0 else "failed",
|
||||
"coverage": "ok" if coverage_percent >= COVERAGE_GATE_PERCENT else "failed",
|
||||
"loc": "ok" if source_lines_over_500 == 0 else "failed",
|
||||
"docs_naming": "not_applicable",
|
||||
"gate_glue": "ok",
|
||||
"sonarqube": _sonarqube_check_status(build_dir),
|
||||
"supply_chain": _supply_chain_check_status(build_dir),
|
||||
}
|
||||
checks.update(_parse_check_overrides(args.check))
|
||||
payload = _build_payload(
|
||||
args.suite,
|
||||
args.trigger,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user