41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
"""Command-line entry point for publishing CI test metrics."""
|
||
|
|
|
||
|
|
import argparse
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
from .summary import load_junit_summary, publish_quality_metrics
|
||
|
|
|
||
|
|
|
||
|
|
def _build_parser() -> argparse.ArgumentParser:
|
||
|
|
"""Build the CLI parser for the metrics publisher."""
|
||
|
|
|
||
|
|
parser = argparse.ArgumentParser(description="Publish test-suite metrics to Pushgateway")
|
||
|
|
parser.add_argument("--gateway", required=True, help="Pushgateway base URL")
|
||
|
|
parser.add_argument("--suite", required=True, help="Logical suite name")
|
||
|
|
parser.add_argument("--job", default="platform-quality-ci", help="Pushgateway job label")
|
||
|
|
parser.add_argument("--status", choices=("ok", "failed"), required=True, help="Gate outcome")
|
||
|
|
parser.add_argument("--junit", nargs="*", default=(), help="JUnit XML files to aggregate")
|
||
|
|
return parser
|
||
|
|
|
||
|
|
|
||
|
|
def main(argv: list[str] | None = None) -> int:
|
||
|
|
"""Parse arguments, aggregate JUnit files, and publish metrics."""
|
||
|
|
|
||
|
|
parser = _build_parser()
|
||
|
|
args = parser.parse_args(argv)
|
||
|
|
summary = load_junit_summary(Path(path) for path in args.junit)
|
||
|
|
publish_quality_metrics(
|
||
|
|
gateway=args.gateway,
|
||
|
|
suite=args.suite,
|
||
|
|
job=args.job,
|
||
|
|
status=args.status,
|
||
|
|
summary=summary,
|
||
|
|
)
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
raise SystemExit(main())
|