-
Notifications
You must be signed in to change notification settings - Fork 27
/
chang_us_coverage.py
executable file
·80 lines (62 loc) · 2.15 KB
/
chang_us_coverage.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python3
"""Generate coverage report of Chang User Stories."""
import argparse
import datetime
import json
import logging
from cardano_node_tests.utils import requirements
LOGGER = logging.getLogger(__name__)
def get_args() -> argparse.Namespace:
"""Get command line arguments."""
parser = argparse.ArgumentParser(description=__doc__.split("\n", maxsplit=1)[0])
parser.add_argument(
"-i",
"--input-file",
required=True,
help="File with coverage results",
)
parser.add_argument(
"-t",
"--report-template",
required=True,
help="File with report template",
)
parser.add_argument(
"-o",
"--output-report",
required=True,
help="Report file",
)
return parser.parse_args()
def _get_color(status: str) -> str:
if status == requirements.Statuses.SUCCESS:
return "green"
if status == requirements.Statuses.FAILURE:
return "red"
if status == requirements.Statuses.PARTIAL_SUCCESS:
return "yellow"
return "grey"
def main() -> None:
logging.basicConfig(
format="%(name)s:%(levelname)s:%(message)s",
level=logging.INFO,
)
args = get_args()
with open(args.report_template, encoding="utf-8") as in_fp:
report = in_fp.read()
with open(args.input_file, encoding="utf-8") as in_fp:
coverage = json.load(in_fp)
chang_group: dict = coverage.get(requirements.GroupsKnown.CHANG_US)
for req_id, req_data in chang_group.items():
# Partial or uncovered requirements should be ignored
if req_id.startswith("int") or req_data["status"] == requirements.Statuses.UNCOVERED:
continue
color = _get_color(req_data["status"])
report = report.replace(f"/{req_id}-grey", f"/{req_id}-{color}")
url = req_data.get("url")
report = report.replace(f"https://github.com/{req_id}-404", url)
report = report.replace("TODAY", str(datetime.datetime.now(tz=datetime.timezone.utc).date()))
with open(args.output_report, "w", encoding="utf-8") as out_fp:
out_fp.write(report)
if __name__ == "__main__":
main()