Skip to content

Commit 281cb40

Browse files
update tester logic in scripts
1 parent 354c7e5 commit 281cb40

File tree

4 files changed

+144
-15
lines changed

4 files changed

+144
-15
lines changed

code/tests/meson.build

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11
if get_option('with_test').enabled()
22
run_command(['python3', 'tools' / 'generate-runner.py'], check: true)
3+
cards = run_command(['python3', 'tools' / 'wildcard.py'], check: true)
34

4-
test_c = ['unit_runner.c']
5-
test_cases = [
6-
'jellyfish'
7-
]
5+
test_cases = ['unit_runner.c', cards.stdout().strip().split('\n')]
86

9-
foreach cases : test_cases
10-
test_c += ['cases' / 'test_' + cases + '.c']
11-
test_c += ['cases' / 'test_' + cases + '.cpp']
12-
endforeach
13-
14-
pizza_c = executable('testbed-c', test_c, include_directories: dir,
15-
dependencies: [subproject('fossil-test').get_variable('fossil_test_dep'), fossil_fish_dep])
7+
pizza_c = executable('pizza', test_cases, include_directories: dir, dependencies: [fossil_test_dep])
168

179
test('fossil testing C', pizza_c)
18-
endif
10+
endif

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-test.git")
94+
output.append(f"revision = v{milestone}")
95+
output.append("")
96+
output.append("[provide]")
97+
output.append("fossil-test = fossil_test_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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

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)