aboutsummaryrefslogtreecommitdiff
path: root/tests/summarize.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/summarize.py')
-rw-r--r--tests/summarize.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/summarize.py b/tests/summarize.py
new file mode 100644
index 0000000..5006dc0
--- /dev/null
+++ b/tests/summarize.py
@@ -0,0 +1,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)