From 1376d16790b28962d445b1ab371f1ca71b63b231 Mon Sep 17 00:00:00 2001 From: Gustavo Padovan Date: Thu, 12 Dec 2024 14:15:48 -0300 Subject: [PATCH] results: improve output of the summary cmd Make it short and easier to parse: pass/fail/inconclusive builds: 48/1/0 boots: 464/56/18 tests: 9365/7288/727 Signed-off-by: Gustavo Padovan --- kcidev/libs/common.py | 16 +++++++++++++ kcidev/subcommands/results.py | 42 ++++++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/kcidev/libs/common.py b/kcidev/libs/common.py index 68b5336..b35e0f5 100644 --- a/kcidev/libs/common.py +++ b/kcidev/libs/common.py @@ -42,3 +42,19 @@ def kci_print(content): def kci_err(content): click.secho(content, fg="red", err=True) + + +def kci_msg_nonl(content): + click.echo(content, nl=False) + + +def kci_msg_green_nonl(content): + click.secho(content, fg="green", nl=False) + + +def kci_msg_red_nonl(content): + click.secho(content, fg="red", nl=False) + + +def kci_msg_yellow_nonl(content): + click.secho(content, fg="bright_yellow", nl=False) diff --git a/kcidev/subcommands/results.py b/kcidev/subcommands/results.py index 1f0bdae..8483f54 100644 --- a/kcidev/subcommands/results.py +++ b/kcidev/subcommands/results.py @@ -25,10 +25,46 @@ def fetch_from_api(endpoint, params): return r.json() +def print_summary(type, n_pass, n_fail, n_inconclusive): + kci_msg_nonl(f"{type}:\t") + kci_msg_green_nonl(f"{n_pass}") if n_pass else kci_msg_nonl(f"{n_pass}") + kci_msg_nonl("/") + kci_msg_red_nonl(f"{n_fail}") if n_fail else kci_msg_nonl(f"{n_fail}") + kci_msg_nonl("/") + ( + kci_msg_yellow_nonl(f"{n_inconclusive}") + if n_inconclusive + else kci_msg_nonl(f"{n_inconclusive}") + ) + kci_msg_nonl(f"\n") + + +def sum_inconclusive_results(results): + count = 0 + for status in ["ERROR", "SKIP", "MISS", "DONE", "NULL"]: + if status in results.keys(): + count += results[status] + + return count + + def cmd_summary(data): - kci_print(f"Builds: {data['buildsSummary']['builds']}") - kci_print(f"Boots: {data['bootStatusSummary']}") - kci_print(f"Tests: {data['testStatusSummary']}") + kci_print("pass/fail/inconclusive") + + builds = data["buildsSummary"]["builds"] + print_summary("builds", builds["valid"], builds["invalid"], builds["null"]) + + boots = data["bootStatusSummary"] + inconclusive_boots = sum_inconclusive_results(boots) + pass_boots = boots["PASS"] if "PASS" in boots.keys() else 0 + fail_boots = boots["FAIL"] if "FAIL" in boots.keys() else 0 + print_summary("boots", pass_boots, fail_boots, inconclusive_boots) + + tests = data["testStatusSummary"] + pass_tests = tests["PASS"] if "PASS" in tests.keys() else 0 + fail_tests = tests["FAIL"] if "FAIL" in tests.keys() else 0 + inconclusive_tests = sum_inconclusive_results(tests) + print_summary("tests", pass_tests, fail_tests, inconclusive_tests) def cmd_failed_builds(data, download_logs):