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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#!/usr/bin/env python
"""generate_release.py.
This script is used to generate the release.yml file as per
https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
"""
import yaml
SCOPES = [
"anta",
"anta.tests",
"anta.cli",
]
# CI and Test are excluded from Release Notes
CATEGORIES = {
"feat": "Features",
"fix": "Bug Fixes",
"cut": "Cut",
"doc": "Documentation",
"bump": "Bump",
"revert": "Revert",
"refactor": "Refactoring",
}
class SafeDumper(yaml.SafeDumper):
"""Make yamllint happy
https://github.com/yaml/pyyaml/issues/234#issuecomment-765894586.
"""
# pylint: disable=R0901,W0613,W1113
def increase_indent(self, flow=False, *args, **kwargs):
return super().increase_indent(flow=flow, indentless=False)
if __name__ == "__main__":
exclude_list = []
categories_list = []
# First add exclude labels
for scope in SCOPES:
exclude_list.append(f"rn: test({scope})")
exclude_list.append(f"rn: ci({scope})")
exclude_list.extend(["rn: test", "rn: ci"])
# Then add the categories
# First add Breaking Changes
breaking_label_categories = ["feat", "fix", "cut", "revert", "refactor", "bump"]
breaking_labels = [f"rn: {cc_type}({scope})!" for cc_type in breaking_label_categories for scope in SCOPES]
breaking_labels.extend([f"rn: {cc_type}!" for cc_type in breaking_label_categories])
categories_list.append(
{
"title": "Breaking Changes",
"labels": breaking_labels,
},
)
# Add new features
feat_labels = [f"rn: feat({scope})" for scope in SCOPES]
feat_labels.append("rn: feat")
categories_list.append(
{
"title": "New features and enhancements",
"labels": feat_labels,
},
)
# Add fixes
fixes_labels = [f"rn: fix({scope})" for scope in SCOPES]
fixes_labels.append("rn: fix")
categories_list.append(
{
"title": "Fixed issues",
"labels": fixes_labels,
},
)
# Add Documentation
doc_labels = [f"rn: doc({scope})" for scope in SCOPES]
doc_labels.append("rn: doc")
categories_list.append(
{
"title": "Documentation",
"labels": doc_labels,
},
)
# Add the catch all
categories_list.append(
{
"title": "Other Changes",
"labels": ["*"],
},
)
with open(r"release.yml", "w", encoding="utf-8") as release_file:
yaml.dump(
{
"changelog": {
"exclude": {"labels": exclude_list},
"categories": categories_list,
},
},
release_file,
Dumper=SafeDumper,
sort_keys=False,
)
|