1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#!/usr/bin/env python3
"""Summarize retained case results locally and in GitHub Actions."""
import argparse
import json
import os
from pathlib import Path
def summarize(directory):
results = [json.loads(path.read_text(encoding="utf-8"))
for path in sorted(directory.glob("*/*/result.json"))]
if not results:
return "No compiler case results were produced; inspect the build/CTest log.\n"
failures = [result for result in results if not result["passed"]]
lines = [f"Compiler cases: {len(results) - len(failures)}/{len(results)} passed.", "",
"| Group | Passed | Total |", "|---|---:|---:|"]
for suite in ["i", "ii", "iii"]:
subset = [result for result in results if result["case"].startswith(suite + "/")]
lines.append(f"| {suite} | {sum(result['passed'] for result in subset)} | {len(subset)} |")
lines += ["", f"Commit: `{results[0]['commit']}`. Seed: `{results[0]['seed']}`.",
"Fixed expectations: pending human review."]
if failures:
lines += ["", "Failures:", ""]
for result in failures:
stages = ", ".join(failure["stage"] for failure in result["failures"])
lines.append(f"- `{result['case']}` ({stages}); see its `result.json` and command logs.")
return "\n".join(lines) + "\n"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("directory", type=Path)
args = parser.parse_args()
summary = summarize(args.directory)
print(summary, end="")
args.directory.mkdir(parents=True, exist_ok=True)
(args.directory / "summary.md").write_text(summary, encoding="utf-8")
if os.environ.get("GITHUB_STEP_SUMMARY"):
with open(os.environ["GITHUB_STEP_SUMMARY"], "a", encoding="utf-8") as output:
output.write(summary)
|