#!/usr/bin/env python3 # # Renders a list of xml files taken as arguments into GHA-styled messages in groups. # Explicitly aims not to have any dependencies, to reduce installation load. # Should just be able to run in the context of your standard github runner. # Potentially rewrite as an independent action, use handlebars to template result import sys import xml.etree.ElementTree as ET suitename = sys.argv[1] xmlfiles = sys.argv[2:] print("::group::Arguments") print(f"{sys.argv}") print("::endgroup::") for xmlfile in xmlfiles: try: tree = ET.parse(xmlfile) root = tree.getroot() name = root.attrib['name'] time = root.attrib['time'] tests = int(root.attrib['tests']) skipped = int(root.attrib['skipped']) errors = int(root.attrib['errors']) failures = int(root.attrib['failures']) success = tests - failures - errors - skipped total = tests - skipped print(f"::group::{name} {success}/{total} ({skipped} skipped) in {time}") for testcase in root: if testcase.tag != "testcase": continue testname = testcase.attrib['classname'] message = testcase.attrib['name'] time = testcase.attrib['time'] child = testcase.find("failure") if child is None: print(f"{message} in {time}s") else: print(f"::error file={testname}::{message} in {time}s") print(child.text) body = f" passed={success} failures={failures} errors={errors} skipped={skipped}" print(f"::set-output name={suitename}::={body}") except FileNotFoundError: print(f"::error::Unable to open test results file {xmlfile} - check if the tests completed") print("::endgroup::")