generated from coulomb/repo-seed
maturity scorecard generation
This commit is contained in:
@@ -7,10 +7,19 @@ import argparse
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
|
||||
|
||||
from open_cmis_tck.normalization import ( # noqa: E402
|
||||
aggregate_case_result,
|
||||
parse_text_report,
|
||||
result_counts,
|
||||
)
|
||||
|
||||
|
||||
GROUP_CLASSES = {
|
||||
"repository-type": [
|
||||
@@ -57,7 +66,14 @@ def main() -> int:
|
||||
|
||||
result = run_console_adapter(args)
|
||||
print(json.dumps(result, indent=2, sort_keys=True))
|
||||
return 0 if result["result"] in {"pass", "skipped"} else 1
|
||||
non_error_results = {
|
||||
"pass",
|
||||
"skipped",
|
||||
"warning",
|
||||
"expected_gap",
|
||||
"unsupported_by_design",
|
||||
}
|
||||
return 0 if result["result"] in non_error_results else 1
|
||||
|
||||
|
||||
def run_console_adapter(args: argparse.Namespace) -> dict[str, Any]:
|
||||
@@ -157,14 +173,16 @@ def run_console_adapter(args: argparse.Namespace) -> dict[str, Any]:
|
||||
]
|
||||
)
|
||||
|
||||
cases = _cases_from_console_output(completed.stdout)
|
||||
if completed.returncode == 0 and not any(case["status"] == "fail" for case in cases):
|
||||
cases = parse_text_report(completed.stdout, args.check_group, group_classes)
|
||||
if cases:
|
||||
status = aggregate_case_result(result_counts(cases), completed.returncode)
|
||||
elif completed.returncode == 0:
|
||||
status = "pass"
|
||||
else:
|
||||
status = "fail"
|
||||
status = "infrastructure_error"
|
||||
return _result(
|
||||
status,
|
||||
[f"OpenCMIS TCK ConsoleRunner exited with {completed.returncode} for {args.check_group}."],
|
||||
_console_observations(completed.returncode, args.check_group, cases),
|
||||
args,
|
||||
group_classes,
|
||||
args.run_dir,
|
||||
@@ -301,26 +319,6 @@ def _maven_command(args: argparse.Namespace, session_path: Path, groups_path: Pa
|
||||
]
|
||||
|
||||
|
||||
def _cases_from_console_output(output: str) -> list[dict[str, str]]:
|
||||
cases = []
|
||||
for line in output.splitlines():
|
||||
stripped = line.strip()
|
||||
upper = stripped.upper()
|
||||
if not stripped:
|
||||
continue
|
||||
if "UNEXPECTED_EXCEPTION" in upper:
|
||||
cases.append({"id": stripped[:120], "status": "infrastructure_error", "message": stripped})
|
||||
elif "FAILURE" in upper:
|
||||
cases.append({"id": stripped[:120], "status": "fail", "message": stripped})
|
||||
elif "WARNING" in upper:
|
||||
cases.append({"id": stripped[:120], "status": "warning", "message": stripped})
|
||||
elif "SKIPPED" in upper:
|
||||
cases.append({"id": stripped[:120], "status": "skipped", "message": stripped})
|
||||
elif "OK" in upper:
|
||||
cases.append({"id": stripped[:120], "status": "pass", "message": stripped})
|
||||
return cases
|
||||
|
||||
|
||||
def _result(
|
||||
status: str,
|
||||
observations: list[str],
|
||||
@@ -329,14 +327,12 @@ def _result(
|
||||
run_dir: Path | None,
|
||||
artifact_dir: Path,
|
||||
artifact_refs: list[str],
|
||||
cases: list[dict[str, str]] | None = None,
|
||||
cases: list[dict[str, Any]] | None = None,
|
||||
returncode: int | None = None,
|
||||
extra_facts: dict[str, Any] | None = None,
|
||||
) -> dict[str, Any]:
|
||||
cases = cases or []
|
||||
counts: dict[str, int] = {}
|
||||
for case in cases:
|
||||
counts[case["status"]] = counts.get(case["status"], 0) + 1
|
||||
counts = result_counts(cases)
|
||||
if not counts:
|
||||
counts[status] = 1
|
||||
facts = {
|
||||
@@ -361,6 +357,20 @@ def _result(
|
||||
}
|
||||
|
||||
|
||||
def _console_observations(returncode: int, check_group: str, cases: list[dict[str, Any]]) -> list[str]:
|
||||
if cases:
|
||||
counts = result_counts(cases)
|
||||
return [
|
||||
f"OpenCMIS TCK ConsoleRunner exited with {returncode} for {check_group}.",
|
||||
"Normalized OpenCMIS TextReport case statuses: "
|
||||
+ ", ".join(f"{key}: {value}" for key, value in counts.items())
|
||||
+ ".",
|
||||
]
|
||||
return [
|
||||
f"OpenCMIS TCK ConsoleRunner exited with {returncode} for {check_group}, but no TextReport cases were parsed."
|
||||
]
|
||||
|
||||
|
||||
def _artifact_ref(path: Path, run_dir: Path | None, artifact_dir: Path) -> str:
|
||||
resolved = path.resolve()
|
||||
if run_dir is not None:
|
||||
|
||||
Reference in New Issue
Block a user