diff --git a/telemetry/cli.py b/telemetry/cli.py index a322514..965a458 100644 --- a/telemetry/cli.py +++ b/telemetry/cli.py @@ -6,6 +6,7 @@ import os import telemetry.report +from telemetry.report.utility import map_th_to_bp, map_bp_to_th def validate(field, value, schema): """Validate a field and value data type @@ -208,8 +209,7 @@ def create_results_gist(server, job_name, build_number, board_name, github_gist_ ) if len(boot_test.keys()) == 0: - raise Exception(f"{job_name} - {build_number} not found") - data = {} + print(f"No boot test data found for {job_name} - {build_number}") # get artifacts artifacts_info_txt=tel.artifacts( target_board=None, @@ -218,15 +218,30 @@ def create_results_gist(server, job_name, build_number, board_name, github_gist_ artifact_info_type = "info_txt", ) built_projects = list() + translated_built_projects = list() + data = {} + translated_data = {} for artifact in artifacts_info_txt: if artifact["payload"] == "Built projects": built_projects.append(artifact["payload_param"]) - + + # translate first to test harness board naming scheme for board in built_projects: + translated = map_bp_to_th(board) + if translated: + if type(translated) == list: + for variant in translated: + if variant not in translated_built_projects: + translated_built_projects.append(variant) + else: + translated_built_projects.append(translated) + else: + translated_built_projects.append(board) + + for board in translated_built_projects: if not board in boot_test.keys(): data[board] = "NA" else: - bn = board info = boot_test[board] artifacts = tel.artifacts(board, job_name, build_number) artifact_types = ["enumerated_devs", "missing_devs", "dmesg_err", "pytest_failure"] @@ -245,9 +260,22 @@ def create_results_gist(server, job_name, build_number, board_name, github_gist_ continue info[0]["info_txt"].update({artifact["payload"]:artifact["payload_param"]}) - data[bn] = info[0] + + info[0]["variance_info"] = board.split("-v")[1] if len(board.split("-v")) == 2 else None + data[board] = info[0] + + # translate back to boot partition naming scheme + for bn, details in data.items(): + translated = map_th_to_bp(bn) + if translated: + board_name = translated + else: + board_name = bn + if board_name in translated_data: + board_name += f" ({details['variance_info']})" + translated_data.update({board_name: details}) - m = telemetry.markdown.ResultsMarkdown(data) + m = telemetry.markdown.ResultsMarkdown(translated_data) m.generate_gist(github_gist_url, github_gist_token) @click.command() diff --git a/telemetry/report/markdown.py b/telemetry/report/markdown.py index 76e5164..20ab917 100644 --- a/telemetry/report/markdown.py +++ b/telemetry/report/markdown.py @@ -46,19 +46,25 @@ def generate_param(self,data): elif int(info["drivers_missing"])>0 or\ int(info["dmesg_errors_found"])>0 or\ int(info["pytest_errors"])>0 or\ - int(info["pytest_failures"])>0: + int(info["pytest_failures"])>0 or\ + (int(info["pytest_skipped"])==0 and int(info["pytest_tests"]==0)): test_build_status = "UNSTABLE" elif str(info["last_failing_stage"]) == "NA": test_build_status = "PASSING" else: test_build_status = "INVALID" + # update test stage status uboot_reached_status = "✔" if bool(info["uboot_reached"]) else "❌" linux_prompt_reached_status = "✔" if bool(info["linux_prompt_reached"]) else "❌" drivers_enumerated_status = "✔" if int(info["drivers_missing"]) == 0 and test_build_status != "FAILURE" else "❌" dmesg_status = "✔" if int(info["dmesg_errors_found"]) == 0 and test_build_status != "FAILURE" else "❌" pytest_tests_status = "✔" if int(info["pytest_failures"]) == 0 and test_build_status != "FAILURE" else "❌" + # added validations + pytest_tests_status = "⛔" if int(info["pytest_skipped"]) == 0 and int(info["pytest_tests"]) == 0 else pytest_tests_status + + # update test stage details if test_build_status == "FAILURE": iio_drivers_missing_details = "No Details" iio_drivers_found_details = "No Details" @@ -69,6 +75,7 @@ def generate_param(self,data): iio_drivers_found_details = "No iio drivers found" if len(info["enumerated_devs"]) == 0 else ("
").join(info["enumerated_devs"]) dmesg_errors_found_details = "No errors" if len(info["dmesg_err"]) == 0 else ("
").join(info["dmesg_err"]) pytest_failures_details = "No failures" if len(info["pytest_failure"]) == 0 else ("
").join(info["pytest_failure"]) + pytest_failures_details = "Invalid" if pytest_tests_status == "⛔" else pytest_failures_details last_failing_stage = str(info["last_failing_stage"]) last_failing_stage_failure = str(info["last_failing_stage_failure"]) diff --git a/telemetry/report/utility.py b/telemetry/report/utility.py new file mode 100644 index 0000000..d94699b --- /dev/null +++ b/telemetry/report/utility.py @@ -0,0 +1,37 @@ +BOOT_PARTITION_BN_MAP = { + "zynq-adrv9364-z7020-bob-cmos" : "zynq-adrv9364-z7020-bob-vcmos", + "zynq-adrv9364-z7020-bob" : "zynq-adrv9364-z7020-bob-vlvds", + "zynqmp-zcu102-rev10-ad9081-204b-txmode9-rxmode4" : "zynqmp-zcu102-rev10-ad9081-v204b-txmode9-rxmode4", + "zynqmp-zcu102-rev10-ad9081-204c-txmode0-rxmode1" : "zynqmp-zcu102-rev10-ad9081-v204c-txmode0-rxmode1", + "zynqmp-zcu102-rev10-ad9081" : "zynqmp-zcu102-rev10-ad9081-vm4-l8", + "zynqmp-zcu102-rev10-ad9081-m8-l4" : "zynqmp-zcu102-rev10-ad9081-vm8-l4", + "zynq-zed-adv7511-adrv9002-rx2tx2" : "zynq-zed-adv7511-adrv9002-rx2tx2-vcmos", + "zynq-zed-adv7511-adrv9002" : "zynq-zed-adv7511-adrv9002-vcmos", + "zynqmp-zcu102-rev10-adrv9002-rx2tx2" : ["zynqmp-zcu102-rev10-adrv9002-rx2tx2-vcmos","zynqmp-zcu102-rev10-adrv9002-rx2tx2-vlvds"], + "zynqmp-zcu102-rev10-adrv9002" : ["zynqmp-zcu102-rev10-adrv9002-vcmos","zynqmp-zcu102-rev10-adrv9002-vlvds"], + "zynqmp-adrv9009-zu11eg-revb-adrv2crr-fmc-revb-jesd204-fsm":"zynqmp-adrv9009-zu11eg-revb-adrv2crr-fmc-revb", + "zynqmp-adrv9009-zu11eg-revb-adrv2crr-fmc-revb-sync-fmcomms8-jesd204-fsm":"zynqmp-adrv9009-zu11eg-revb-adrv2crr-fmc-revb-vsync-fmcomms8", +} + +def map_bp_to_th(bp_bn_name): + '''Maps boot partition board name with the test harness board name''' + match = None + if bp_bn_name in BOOT_PARTITION_BN_MAP.keys(): + match = BOOT_PARTITION_BN_MAP[bp_bn_name] + return match + +def map_th_to_bp(th_bn_name): + '''Maps test harness board name board name with the boot partition board name''' + boot_partition_bn_th_map = dict() + for bn, thbn in BOOT_PARTITION_BN_MAP.items(): + if type(thbn) == list: + for thbnv in thbn: + boot_partition_bn_th_map.update({thbnv:bn}) + else: + boot_partition_bn_th_map.update({thbn:bn}) + + match = None + if th_bn_name in boot_partition_bn_th_map.keys(): + match = boot_partition_bn_th_map[th_bn_name] + return match +