Add github action

This commit is contained in:
jbajic
2022-12-08 13:30:14 +01:00
parent 0d19d347f8
commit 263d18e7e2
2 changed files with 121 additions and 2 deletions

View File

@@ -73,7 +73,12 @@ jobs:
# This is also needed if we want do to comparison against other branches
# See https://github.community/t/checkout-code-fails-when-it-runs-lerna-run-test-since-master/17920
- name: Fetch all history for all tags and branches
run: git fetch
uses: nick-fields/retry@v2
with:
timeout_minutes: 1
max_attempts: 3
shell: bash
command: git fetch
- name: Initialize deps
run: |
@@ -261,7 +266,37 @@ jobs:
# Run simulation tests.
cd tests/mgbench
./benchmark.py accesscontrol/small --num-workers-for-import 1 --test-system-arg "split-file splitfiles/accesscontrol_small.shard_configuration bolt-num-workers 1"
./benchmark.py accesscontrol/small --num-workers-for-import 1 \
--export-results=output_github_benchmark.json --test-system-arg \
"split-file splitfiles/accesscontrol_small.shard_configuration bolt-num-workers 1"
- name: Adapt benchmark results to benchmark github
run: ./tests/mgbench/format_json.py -i output_github_benchmark.json -o formatted_output_benchmark.json
# Download previous benchmark result from cache (if exists)
- name: Download previous benchmark data
uses: actions/cache@v3
with:
path: ./cache
key: ${{ runner.os }}-benchmark
# Run `github-action-benchmark` action
- name: Store benchmark result
uses: benchmark-action/github-action-benchmark@v1
with:
# What benchmark tool the output.txt came from
tool: "customBiggerIsBetter"
# Where the output from the benchmark tool is stored
output-file-path: formatted_output_benchmark.json
# Where the previous data file is stored
external-data-json-path: ./cache/benchmark-data.json
# Workflow will fail when an alert happens
fail-on-alert: true
# GitHub API token to make a commit comment
github-token: ${{ secrets.GITHUB_TOKEN }}
# Enable alert commit comment
comment-on-alert: true
alert-threshold: "150%"
- name: Run e2e tests
run: |

84
tests/mgbench/format_json.py Executable file
View File

@@ -0,0 +1,84 @@
#!/usr/bin/env python3
# Copyright 2022 Memgraph Ltd.
#
# Use of this software is governed by the Business Source License
# included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
# License, and you may not use this file except in compliance with the Business Source License.
#
# As of the Change Date specified in that file, in accordance with
# the Business Source License, use of this software will be governed
# by the Apache License, Version 2.0, included in the file
# licenses/APL.txt.
import argparse
import json
from pathlib import Path
from typing import Any, Dict, List
def adapt_to_benchmark_action(data: Dict[str, Any]) -> List[Dict[str, Any]]:
output = []
keys = list(data.keys())
assert len(keys) == 1
dataset_name = keys[0]
dataset_keys = list(data[dataset_name])
assert len(dataset_keys) == 1
dataset_type = dataset_keys[0]
for execution_type, execution_data in data[dataset_name][dataset_type].items():
if execution_type == "__import__":
continue
for type, type_data in execution_data.items():
assert "throughput" in type_data, f"There is no throughput in {type_data}!"
output.append(
{
"name": f"{dataset_name}_{dataset_type}_{execution_type}",
"unit": "QPS",
"value": type_data["throughput"],
}
)
return output
ADAPTERS = {
"github_benchmark": adapt_to_benchmark_action,
}
def convert_input(input: Dict[str, Any], adapter: str) -> List[Dict[str, Any]]:
return ADAPTERS[adapter](input)
def parse_args():
parser = argparse.ArgumentParser(
description="JSON adapter.", formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument("-i", "--input", help="Input JSON file.")
parser.add_argument("-o", "--output", help="Output JSON file.")
parser.add_argument(
"--adapter", default="github_benchmark", choices=ADAPTERS.keys(), help="Adapter function to use."
)
return parser.parse_args()
def read_input(input: str) -> Dict[str, Any]:
with Path(input).open() as input_file:
return json.load(input_file)
def output_results(content: List[Dict[str, Any]], output: str):
with Path(output).open("w") as output_file:
output_file.write(json.dumps(content))
def main():
args = parse_args()
content = read_input(args.input)
output_results(convert_input(content, args.adapter), args.output)
if __name__ == "__main__":
main()