Skip to content

Commit 99c1034

Browse files
committed
Improve changelog generation script
1 parent d3ea922 commit 99c1034

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

RELEASES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ I usually do this all on the `master` branch, but doing it in a release branch i
8484
(cd crates/egui_demo_lib && cargo publish --quiet) && echo "✅ egui_demo_lib"
8585
(cd crates/egui_glow && cargo publish --quiet) && echo "✅ egui_glow"
8686
(cd crates/eframe && cargo publish --quiet) && echo "✅ eframe"
87+
(cd crates/egui_kittest && cargo publish --quiet) && echo "✅ egui_kittest"
8788
```
8889

8990
## Announcements

scripts/generate_changelog.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,18 +214,42 @@ def add_to_changelog_file(crate: str, content: str, version: str) -> None:
214214
file.write(content)
215215

216216

217+
def calc_commit_range(new_version: str) -> str:
218+
parts = new_version.split(".")
219+
assert len(parts) == 3, "Expected version to be on the format X.Y.Z"
220+
major = int(parts[0])
221+
minor = int(parts[1])
222+
patch = int(parts[2])
223+
224+
if 0 < patch:
225+
# A patch release.
226+
# Include changes since last patch release.
227+
# This assumes we've cherry-picked stuff for this release.
228+
diff_since_version = f"0.{minor}.{patch - 1}"
229+
elif 0 < minor:
230+
# A minor release
231+
# The diff should span everything since the last minor release.
232+
# The script later excludes duplicated automatically, so we don't include stuff that
233+
# was part of intervening patch releases.
234+
diff_since_version = f"{major}.{minor - 1}.0"
235+
else:
236+
# A major release
237+
# The diff should span everything since the last major release.
238+
# The script later excludes duplicated automatically, so we don't include stuff that
239+
# was part of intervening minor/patch releases.
240+
diff_since_version = f"{major - 1}.{minor}.0"
241+
242+
return f"{diff_since_version}..HEAD"
243+
244+
217245
def main() -> None:
218246
parser = argparse.ArgumentParser(description="Generate a changelog.")
219-
parser.add_argument("--commit-range", help="e.g. 0.24.0..HEAD", required=True)
247+
parser.add_argument("--version", help="What release is this?", required=True)
220248
parser.add_argument(
221249
"--write", help="Write into the different changelogs?", action="store_true"
222250
)
223-
parser.add_argument("--version", help="What release is this?")
224251
args = parser.parse_args()
225-
226-
if args.write and not args.version:
227-
print("ERROR: --version is required when --write is used")
228-
sys.exit(1)
252+
commit_range = calc_commit_range(args.version)
229253

230254
crate_names = [
231255
"ecolor",
@@ -251,7 +275,7 @@ def main() -> None:
251275
all_changelogs += file.read()
252276

253277
repo = Repo(".")
254-
commits = list(repo.iter_commits(args.commit_range))
278+
commits = list(repo.iter_commits(commit_range))
255279
commits.reverse() # Most recent last
256280
commit_infos = list(map(get_commit_info, commits))
257281

@@ -307,7 +331,7 @@ def main() -> None:
307331
unsorted_prs.append(pr_summary(pr_info))
308332

309333
print()
310-
print(f"Full diff at https://github.com/emilk/egui/compare/{args.commit_range}")
334+
print(f"Full diff at https://github.com/emilk/egui/compare/{commit_range}")
311335
print()
312336
for crate in crate_names:
313337
if crate in crate_sections:

0 commit comments

Comments
 (0)