2022-02-24 13:32:01 +03:00
|
|
|
#!/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.
|
|
|
|
|
2022-02-24 17:47:23 +03:00
|
|
|
# Potentially rewrite as an independent action, use handlebars to template result
|
2022-02-24 13:32:01 +03:00
|
|
|
import sys
|
|
|
|
import xml.etree.ElementTree as ET
|
2022-02-24 14:40:04 +03:00
|
|
|
suitename = sys.argv[1]
|
|
|
|
xmlfiles = sys.argv[2:]
|
2022-02-24 13:32:01 +03:00
|
|
|
|
|
|
|
for xmlfile in xmlfiles:
|
|
|
|
tree = ET.parse(xmlfile)
|
|
|
|
|
|
|
|
root = tree.getroot()
|
|
|
|
name = root.attrib['name']
|
|
|
|
name = root.attrib['time']
|
2022-02-24 17:47:23 +03:00
|
|
|
tests = int(root.attrib['tests'])
|
|
|
|
passed = int(root.attrib['passed'])
|
|
|
|
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}")
|
2022-02-24 13:32:01 +03:00
|
|
|
|
|
|
|
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)
|
2022-02-24 17:47:23 +03:00
|
|
|
body = f"passed={passed} failures={failures} errors={errors} skipped={skipped}"
|
2022-02-24 15:14:18 +03:00
|
|
|
print(f"::set-output name={suitename}::passed={body}")
|
2022-02-24 13:32:01 +03:00
|
|
|
print("::endgroup::")
|
2022-02-24 17:47:23 +03:00
|
|
|
|