summaryrefslogtreecommitdiff
path: root/.github/scripts/update_history.py
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2026-05-21 19:04:01 +1000
committerGitHub <noreply@github.com>2026-05-21 19:04:01 +1000
commit816332cbaf256c405a109d8cc16fec8f15df907e (patch)
treecb058fae973f81e86316657e5abba5d4fb8f7e29 /.github/scripts/update_history.py
parent5b4b6bde235e47fcc7074578673dfea1077771a7 (diff)
Added benchmarking to the CI (#423)
* Added benchmarking to the CI * Updated writing access of benchmark.yml * Added benchmark-comment.yml that pushes the comment to the PR * Added read permission
Diffstat (limited to '.github/scripts/update_history.py')
-rw-r--r--.github/scripts/update_history.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/.github/scripts/update_history.py b/.github/scripts/update_history.py
new file mode 100644
index 00000000..6fae798c
--- /dev/null
+++ b/.github/scripts/update_history.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+"""
+Append the current JMH results to benchmark-history.json and overwrite
+benchmark-latest.json on the benchmark-data branch working directory.
+
+Usage:
+ python update_history.py <results.json> <output_dir> <commit_sha> [<pr_number>]
+
+<output_dir> is the directory where benchmark-history.json and
+benchmark-latest.json will be written (the benchmark-data checkout root).
+"""
+
+import json
+import sys
+from datetime import datetime, timezone
+from pathlib import Path
+
+
+def main() -> None:
+ if len(sys.argv) < 4:
+ print("Usage: update_history.py <results.json> <output_dir> <commit_sha> [<pr_number>]", file=sys.stderr)
+ sys.exit(1)
+
+ results_path = Path(sys.argv[1])
+ output_dir = Path(sys.argv[2])
+ commit_sha = sys.argv[3]
+ pr_number = int(sys.argv[4]) if len(sys.argv) > 4 else None
+
+ results = json.loads(results_path.read_text())
+
+ # Tag each result entry with the commit so compare_benchmarks.py can display it
+ for entry in results:
+ entry["_meta_commit"] = commit_sha
+
+ history_path = output_dir / "benchmark-history.json"
+ history = json.loads(history_path.read_text()) if history_path.exists() else []
+
+ history.append(
+ {
+ "commit": commit_sha,
+ "pr": pr_number,
+ "timestamp": datetime.now(timezone.utc).isoformat(),
+ "results": results,
+ }
+ )
+
+ history_path.write_text(json.dumps(history, indent=2))
+
+ print(f"Stored results for commit {commit_sha[:7]} ({len(results)} benchmark(s)).")
+
+
+if __name__ == "__main__":
+ main() \ No newline at end of file