pqc/.github/workflows/generate_workflows.py
Thom Wiggers 351d17ae70 Implement testing via Github actions
* Fix a bunch of issues in SPHINCS+ on Windows
* Fix testing makefile dependencies by fixing times of common files
  (affected Windows testing mainly)
2021-03-24 21:02:48 +00:00

54 lines
1.5 KiB
Python

#!/usr/bin/env python3
import sys
import difflib
from pathlib import Path
import jinja2
def render_workflow(scheme_path):
result = 0
scheme_name = scheme_path.name
scheme_type = str(scheme_path.parent.name).split("_")[1]
target_name = f"{scheme_type}_{scheme_name}.yml"
tpl = TPL_ENV.get_template("template.yml.j2")
new_contents = tpl.render(scheme_type=scheme_type, scheme_name=scheme_name)
if not TEST_MODE:
with open(target_name, "w") as f:
f.write(new_contents)
else:
if (Path(".") / target_name).exists():
with open(target_name, "r") as f:
file_contents = f.read()
else:
file_contents = ""
if file_contents != new_contents:
sys.stdout.writelines(difflib.unified_diff(
file_contents.splitlines(keepends=True), new_contents.splitlines(keepends=True),
fromfile=f"old/{target_name}", tofile=f"new/{target_name}")
)
result = 1
return result
if __name__ == "__main__":
TEST_MODE = len(sys.argv) > 1 and sys.argv[1] == "test"
loader = jinja2.FileSystemLoader(".")
TPL_ENV = jinja2.Environment(
loader=loader, variable_start_string="{-", variable_end_string="-}"
)
with open("template.yml.j2") as f:
TEMPLATE = f.read()
root = Path("../..")
paths = root.glob("crypto_*/*")
for path in paths:
result = render_workflow(path)
sys.exit(result)