ci(bstein-home): publish canonical build info

This commit is contained in:
codex 2026-04-21 09:35:04 -03:00
parent 951780f115
commit 1908830009
2 changed files with 18 additions and 0 deletions

View File

@ -20,6 +20,8 @@ def _build_parser() -> argparse.ArgumentParser:
parser.add_argument("--status", choices=("ok", "failed"), required=True, help="Gate outcome") parser.add_argument("--status", choices=("ok", "failed"), required=True, help="Gate outcome")
parser.add_argument("--junit", nargs="*", default=(), help="JUnit XML files to aggregate") parser.add_argument("--junit", nargs="*", default=(), help="JUnit XML files to aggregate")
parser.add_argument("--quality-report", default="build/quality-gate.json", help="Quality gate JSON report") parser.add_argument("--quality-report", default="build/quality-gate.json", help="Quality gate JSON report")
parser.add_argument("--branch", default=os.getenv("BRANCH_NAME", os.getenv("GIT_BRANCH", "")), help="SCM branch")
parser.add_argument("--build-number", default=os.getenv("BUILD_NUMBER", ""), help="Jenkins build number")
return parser return parser
@ -104,6 +106,8 @@ def main(argv: list[str] | None = None) -> int:
summary=summary, summary=summary,
workspace_line_coverage_percent=coverage_percent, workspace_line_coverage_percent=coverage_percent,
source_lines_over_500=source_lines_over_500, source_lines_over_500=source_lines_over_500,
branch=args.branch,
build_number=args.build_number,
checks=checks, checks=checks,
test_cases=test_cases, test_cases=test_cases,
) )

View File

@ -15,6 +15,12 @@ def _escape_label(value: str) -> str:
return value.replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"') return value.replace("\\", "\\\\").replace("\n", "\\n").replace('"', '\\"')
def _label_str(labels: dict[str, str]) -> str:
"""Render Prometheus labels, omitting empty optional values."""
parts = [f'{key}="{_escape_label(val)}"' for key, val in labels.items() if val]
return "{" + ",".join(parts) + "}" if parts else ""
@dataclass(frozen=True) @dataclass(frozen=True)
class RunSummary: class RunSummary:
"""Aggregate counts from a collection of JUnit XML files.""" """Aggregate counts from a collection of JUnit XML files."""
@ -102,6 +108,8 @@ def render_payload(
summary: RunSummary, summary: RunSummary,
workspace_line_coverage_percent: float = 0.0, workspace_line_coverage_percent: float = 0.0,
source_lines_over_500: int = 0, source_lines_over_500: int = 0,
branch: str = "",
build_number: str = "",
checks: dict[str, str] | None = None, checks: dict[str, str] | None = None,
test_cases: list[tuple[str, str]] | None = None, test_cases: list[tuple[str, str]] | None = None,
) -> str: ) -> str:
@ -119,6 +127,8 @@ def render_payload(
f'platform_quality_gate_workspace_line_coverage_percent{{suite="{suite}"}} {workspace_line_coverage_percent:.3f}\n' f'platform_quality_gate_workspace_line_coverage_percent{{suite="{suite}"}} {workspace_line_coverage_percent:.3f}\n'
"# TYPE platform_quality_gate_source_lines_over_500_total gauge\n" "# TYPE platform_quality_gate_source_lines_over_500_total gauge\n"
f'platform_quality_gate_source_lines_over_500_total{{suite="{suite}"}} {int(source_lines_over_500)}\n' f'platform_quality_gate_source_lines_over_500_total{{suite="{suite}"}} {int(source_lines_over_500)}\n'
"# TYPE platform_quality_gate_build_info gauge\n"
f'platform_quality_gate_build_info{_label_str({"suite": suite, "branch": branch, "build_number": build_number})} 1\n'
) )
if checks: if checks:
payload += "# TYPE bstein_home_quality_gate_checks_total gauge\n" payload += "# TYPE bstein_home_quality_gate_checks_total gauge\n"
@ -146,6 +156,8 @@ def publish_quality_metrics(
summary: RunSummary, summary: RunSummary,
workspace_line_coverage_percent: float = 0.0, workspace_line_coverage_percent: float = 0.0,
source_lines_over_500: int = 0, source_lines_over_500: int = 0,
branch: str = "",
build_number: str = "",
checks: dict[str, str] | None = None, checks: dict[str, str] | None = None,
test_cases: list[tuple[str, str]] | None = None, test_cases: list[tuple[str, str]] | None = None,
) -> None: ) -> None:
@ -166,6 +178,8 @@ def publish_quality_metrics(
summary=summary, summary=summary,
workspace_line_coverage_percent=workspace_line_coverage_percent, workspace_line_coverage_percent=workspace_line_coverage_percent,
source_lines_over_500=source_lines_over_500, source_lines_over_500=source_lines_over_500,
branch=branch,
build_number=build_number,
checks=checks, checks=checks,
test_cases=test_cases, test_cases=test_cases,
) )