Skip to content

Commit 340e73c

Browse files
update python scripts
1 parent 0a914f9 commit 340e73c

File tree

3 files changed

+142
-5
lines changed

3 files changed

+142
-5
lines changed

code/tests/tools/generate-note.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import argparse
2+
import requests
3+
import os
4+
from datetime import datetime
5+
6+
GITHUB_API = "https://api.github.com"
7+
8+
def fetch_milestone_issues(owner, repo, milestone_title, token=None):
9+
headers = {"Authorization": f"token {token}"} if token else {}
10+
11+
# Find milestone ID
12+
milestone_url = f"{GITHUB_API}/repos/{owner}/{repo}/milestones"
13+
milestone_resp = requests.get(milestone_url, headers=headers).json()
14+
milestone_id = next((m['number'] for m in milestone_resp if m['title'] == milestone_title), None)
15+
if milestone_id is None:
16+
raise ValueError(f"Milestone '{milestone_title}' not found.")
17+
18+
# Fetch issues
19+
issues_url = f"{GITHUB_API}/repos/{owner}/{repo}/issues"
20+
issues = []
21+
page = 1
22+
while True:
23+
params = {
24+
"milestone": milestone_id,
25+
"state": "closed",
26+
"per_page": 100,
27+
"page": page
28+
}
29+
page_issues = requests.get(issues_url, headers=headers, params=params).json()
30+
if not page_issues:
31+
break
32+
issues.extend(page_issues)
33+
page += 1
34+
35+
return issues
36+
37+
def group_issues_by_label(issues):
38+
grouped = {"feature": [], "bug": [], "enhancement": [], "other": []}
39+
for issue in issues:
40+
labels = [label["name"] for label in issue["labels"]]
41+
added = False
42+
for key in grouped:
43+
if key in labels:
44+
grouped[key].append(issue)
45+
added = True
46+
break
47+
if not added:
48+
grouped["other"].append(issue)
49+
return grouped
50+
51+
def fetch_repo_description(owner, repo, token=None):
52+
headers = {"Authorization": f"token {token}"} if token else {}
53+
url = f"{GITHUB_API}/repos/{owner}/{repo}"
54+
resp = requests.get(url, headers=headers).json()
55+
return resp.get("description", "")
56+
57+
def generate_markdown(milestone, grouped_issues, repo_description=""):
58+
today = datetime.today().strftime("%Y-%m-%d")
59+
output = [f"# 📦 Release Notes for `{milestone}`", f"_Date: {today}_"]
60+
61+
if repo_description:
62+
output.append(f"\n> {repo_description}\n")
63+
64+
output.append(f"\n## [{milestone}] – {today}")
65+
66+
if grouped_issues["feature"]:
67+
output.append("\n### 🚀 Features")
68+
for issue in grouped_issues["feature"]:
69+
output.append(f"- {issue['title']} (#{issue['number']})")
70+
71+
if grouped_issues["bug"]:
72+
output.append("\n### 🐞 Bug Fixes")
73+
for issue in grouped_issues["bug"]:
74+
output.append(f"- {issue['title']} (#{issue['number']})")
75+
76+
if grouped_issues["enhancement"]:
77+
output.append("\n### 🛠 Enhancements")
78+
for issue in grouped_issues["enhancement"]:
79+
output.append(f"- {issue['title']} (#{issue['number']})")
80+
81+
if grouped_issues["other"]:
82+
output.append("\n### 📦 Other")
83+
for issue in grouped_issues["other"]:
84+
output.append(f"- {issue['title']} (#{issue['number']})")
85+
86+
# 🧩 WrapDB Git Definition
87+
output.append("\n### 🧩 WrapDB Git Definition")
88+
output.append("```ini")
89+
output.append("# ======================")
90+
output.append("# Git Wrap package definition")
91+
output.append("# ======================")
92+
output.append("[wrap-git]")
93+
output.append("url = https://github.com/fossillogic/fossil-io.git")
94+
output.append(f"revision = v{milestone}")
95+
output.append("")
96+
output.append("[provide]")
97+
output.append("fossil-io = fossil_io_dep")
98+
output.append("```")
99+
100+
return "\n".join(output)
101+
102+
def save_to_file(content, filename):
103+
with open(filename, "a") as f:
104+
f.write("\n\n" + content.strip() + "\n")
105+
106+
def main():
107+
parser = argparse.ArgumentParser(description="Pizza Changelog and Release Note Generator")
108+
parser.add_argument("--owner", required=True, help="GitHub repository owner")
109+
parser.add_argument("--repo", required=True, help="GitHub repository name")
110+
parser.add_argument("--milestone", required=True, help="Milestone title")
111+
parser.add_argument("--token", help="GitHub personal access token (optional)")
112+
parser.add_argument("--out", default="CHANGELOG.md", help="Output changelog file")
113+
parser.add_argument("--release-file", action="store_true", help="Also save to release_notes_<milestone>.md")
114+
args = parser.parse_args()
115+
116+
issues = fetch_milestone_issues(args.owner, args.repo, args.milestone, args.token)
117+
grouped = group_issues_by_label(issues)
118+
markdown = generate_markdown(args.milestone, grouped, fetch_repo_description(args.owner, args.repo, args.token))
119+
120+
save_to_file(markdown, args.out)
121+
print(f"✅ Changelog updated: {args.out}")
122+
123+
if args.release_file:
124+
rel_file = f"release_notes_{args.milestone.replace('.', '_')}.md"
125+
save_to_file(markdown, rel_file)
126+
print(f"📝 Release note saved: {rel_file}")
127+
128+
if __name__ == "__main__":
129+
main()

code/tests/tools/generate-runner.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def generate_c_runner(self, test_groups):
2727
# Prepare header content for the test runner
2828
header = """
2929
// Generated Fossil Logic Test Runner
30-
#include <fossil/test/framework.h>
30+
#include <fossil/pizza/framework.h>
3131
3232
// * * * * * * * * * * * * * * * * * * * * * * * *
3333
// * Fossil Logic Test List
@@ -54,9 +54,9 @@ def generate_c_runner(self, test_groups):
5454

5555
# Complete with footer
5656
footer = """\n
57-
FOSSIL_TEST_RUN();
58-
FOSSIL_TEST_SUMMARY();
59-
FOSSIL_TEST_END();
57+
FOSSIL_RUN_ALL();
58+
FOSSIL_SUMMARY();
59+
return FOSSIL_END();
6060
} // end of main
6161
"""
6262

@@ -74,4 +74,4 @@ def generate_c_runner(self, test_groups):
7474
test_groups = generator.find_test_groups()
7575

7676
# Generate the test runner for C and C++ tests
77-
generator.generate_c_runner(test_groups)
77+
generator.generate_c_runner(test_groups)

code/tests/tools/wildcard.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import glob
2+
3+
# Collect all .c and .cpp files directly in the cases directory (not subdirectories)
4+
source_files = glob.glob("cases/*.c") + glob.glob("cases/*.cpp")
5+
6+
# Print each file name with "cases/" prefix
7+
for file in source_files:
8+
print(file)

0 commit comments

Comments
 (0)