From a469a3ed0f966a76c117d0f1241134b7cf607c13 Mon Sep 17 00:00:00 2001 From: Remco Vermeulen Date: Mon, 27 Nov 2023 10:39:16 -0800 Subject: [PATCH 1/3] Find release using tag instead of title --- scripts/release/update-release-notes.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/release/update-release-notes.py b/scripts/release/update-release-notes.py index 5f317ad988..9719e47295 100644 --- a/scripts/release/update-release-notes.py +++ b/scripts/release/update-release-notes.py @@ -48,11 +48,12 @@ def main(args: Namespace) -> int: print(f"Error: invalid version {release_version} use by release branch. Reason {e}", file=sys.stderr) return 1 - releases = [release for release in repo.get_releases() if release.title == f"v{release_version}"] - if len(releases) != 1: - print(f"Error: expected exactly one release with title {args.version}, but found {len(releases)}", file=sys.stderr) + releases = repo.get_releases() + candidate_releases= [release for release in releases if release.tag_name == f"v{release_version}"] + if len(candidate_releases) != 1: + print(f"Error: expected exactly one release with tag v{release_version}, but found {len(candidate_releases)}", file=sys.stderr) return 1 - release = releases[0] + release = candidate_releases[0] release_notes = generate_release_notes() From 13e3fff5f39fb8227c3208742f7688e1073a16a3 Mon Sep 17 00:00:00 2001 From: Remco Vermeulen Date: Mon, 27 Nov 2023 10:44:41 -0800 Subject: [PATCH 2/3] Provide previous release tag for release note generation --- scripts/release/update-release-notes.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/release/update-release-notes.py b/scripts/release/update-release-notes.py index 9719e47295..4fc3420b2f 100644 --- a/scripts/release/update-release-notes.py +++ b/scripts/release/update-release-notes.py @@ -6,9 +6,9 @@ if TYPE_CHECKING: from argparse import Namespace -def generate_release_notes() -> str: +def generate_release_note(previous_release_tag: str) -> str: script_path = Path(__file__).parent / "generate_release_notes.py" - cp = subprocess.run(["python", str(script_path)], capture_output=True) + cp = subprocess.run(["python", str(script_path), previous_release_tag], capture_output=True) if cp.returncode != 0: raise Exception(f"Error generating release notes: {cp.stderr.decode('utf-8')}") @@ -20,6 +20,7 @@ def main(args: Namespace) -> int: import semantic_version # type: ignore import re import sys + from functools import cmp_to_key repo = Github(auth=Auth.Token(args.github_token)).get_repo(args.repo) @@ -55,10 +56,19 @@ def main(args: Namespace) -> int: return 1 release = candidate_releases[0] - release_notes = generate_release_notes() + # All the releases that are not draft and have a valid semantic version tag + previous_releases = [release for release in releases if semantic_version.validate(release.tag_name[1:]) and not release.draft] # type: ignore + if len(previous_releases) == 0: + print(f"Error: no previous releases found", file=sys.stderr) + return 1 + # Sort them based on their semantic version tags. + previous_releases.sort(key=cmp_to_key(lambda a,b: semantic_version.compare(a.tag_name[1:], b.tag_name[1:])), reverse=True) # type: ignore + previous_release = previous_releases[0].tag_name + print(f"Using previous release: {previous_release}") - release.update_release(name=release.title, message=release_notes, draft=release.draft, prerelease=release.prerelease, tag_name=release.tag_name) + release_notes = generate_release_note(previous_release) + release.update_release(name=release.title, message=release_notes, draft=release.draft, prerelease=release.prerelease, tag_name=release.tag_name) return 0 if __name__ == '__main__': From 89495c532e61f5699cb6cb2b5694b5089f0729ae Mon Sep 17 00:00:00 2001 From: Remco Vermeulen Date: Mon, 27 Nov 2023 14:05:24 -0800 Subject: [PATCH 3/3] Clarify assumption --- scripts/release/update-release-notes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release/update-release-notes.py b/scripts/release/update-release-notes.py index 4fc3420b2f..964fcb339e 100644 --- a/scripts/release/update-release-notes.py +++ b/scripts/release/update-release-notes.py @@ -56,7 +56,7 @@ def main(args: Namespace) -> int: return 1 release = candidate_releases[0] - # All the releases that are not draft and have a valid semantic version tag + # All the releases that are not draft and have a valid semantic version tag, our current release is assumed to be in draft (i.e. not yet released) previous_releases = [release for release in releases if semantic_version.validate(release.tag_name[1:]) and not release.draft] # type: ignore if len(previous_releases) == 0: print(f"Error: no previous releases found", file=sys.stderr)