From 0919c56c610376659c5818b3f0add3b4fe6049b5 Mon Sep 17 00:00:00 2001 From: codex Date: Mon, 20 Apr 2026 09:07:52 -0300 Subject: [PATCH] ci(ananke): add package-level fallback for per-test metrics --- scripts/publish_quality_metrics.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/scripts/publish_quality_metrics.py b/scripts/publish_quality_metrics.py index a08238b..d472711 100755 --- a/scripts/publish_quality_metrics.py +++ b/scripts/publish_quality_metrics.py @@ -115,12 +115,16 @@ def _build_payload( f'ananke_quality_gate_checks_total{{suite="{suite}",check="{check_name}",result="{check_status}"}} 1' for check_name, check_status in checks.items() ) + lines.append("# TYPE platform_quality_gate_test_case_result gauge") if test_cases: - lines.append("# TYPE platform_quality_gate_test_case_result gauge") lines.extend( f'platform_quality_gate_test_case_result{{suite="{suite}",test="{_escape_label(test_name)}",status="{_escape_label(test_status)}"}} 1' for test_name, test_status in test_cases ) + else: + lines.append( + f'platform_quality_gate_test_case_result{{suite="{suite}",test="__no_test_cases__",status="skipped"}} 1' + ) return "\n".join(lines) + "\n" @@ -182,6 +186,22 @@ def _parse_go_test_cases(output_path: Path) -> list[tuple[str, str]]: cleaned = str(test_name).strip() if cleaned: cases.append((cleaned, status)) + if cases: + return cases + + # Fallback for non-verbose `go test` output where individual test names are absent. + package_cases: list[tuple[str, str]] = [] + for package_name in re.findall(r"^ok\s+([^\s]+)", text, flags=re.M): + cleaned = str(package_name).strip() + if cleaned: + package_cases.append((f"package::{cleaned}", "passed")) + for package_name in re.findall(r"^FAIL\s+([^\s]+)", text, flags=re.M): + cleaned = str(package_name).strip() + if cleaned: + package_cases.append((f"package::{cleaned}", "failed")) + if package_cases: + deduped = list(dict.fromkeys(package_cases)) + return deduped return cases