Skip to content

Commit d79970f

Browse files
authored
Merge pull request #455 from rvermeulen/rvermeulen/address-release-note-generation
Update release note generation
2 parents 051b4d0 + 89495c5 commit d79970f

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

scripts/release/update-release-notes.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
if TYPE_CHECKING:
77
from argparse import Namespace
88

9-
def generate_release_notes() -> str:
9+
def generate_release_note(previous_release_tag: str) -> str:
1010
script_path = Path(__file__).parent / "generate_release_notes.py"
11-
cp = subprocess.run(["python", str(script_path)], capture_output=True)
11+
cp = subprocess.run(["python", str(script_path), previous_release_tag], capture_output=True)
1212

1313
if cp.returncode != 0:
1414
raise Exception(f"Error generating release notes: {cp.stderr.decode('utf-8')}")
@@ -20,6 +20,7 @@ def main(args: Namespace) -> int:
2020
import semantic_version # type: ignore
2121
import re
2222
import sys
23+
from functools import cmp_to_key
2324

2425
repo = Github(auth=Auth.Token(args.github_token)).get_repo(args.repo)
2526

@@ -48,16 +49,26 @@ def main(args: Namespace) -> int:
4849
print(f"Error: invalid version {release_version} use by release branch. Reason {e}", file=sys.stderr)
4950
return 1
5051

51-
releases = [release for release in repo.get_releases() if release.title == f"v{release_version}"]
52-
if len(releases) != 1:
53-
print(f"Error: expected exactly one release with title {args.version}, but found {len(releases)}", file=sys.stderr)
52+
releases = repo.get_releases()
53+
candidate_releases= [release for release in releases if release.tag_name == f"v{release_version}"]
54+
if len(candidate_releases) != 1:
55+
print(f"Error: expected exactly one release with tag v{release_version}, but found {len(candidate_releases)}", file=sys.stderr)
5456
return 1
55-
release = releases[0]
57+
release = candidate_releases[0]
5658

57-
release_notes = generate_release_notes()
59+
# 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)
60+
previous_releases = [release for release in releases if semantic_version.validate(release.tag_name[1:]) and not release.draft] # type: ignore
61+
if len(previous_releases) == 0:
62+
print(f"Error: no previous releases found", file=sys.stderr)
63+
return 1
64+
# Sort them based on their semantic version tags.
65+
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
66+
previous_release = previous_releases[0].tag_name
67+
print(f"Using previous release: {previous_release}")
5868

59-
release.update_release(name=release.title, message=release_notes, draft=release.draft, prerelease=release.prerelease, tag_name=release.tag_name)
69+
release_notes = generate_release_note(previous_release)
6070

71+
release.update_release(name=release.title, message=release_notes, draft=release.draft, prerelease=release.prerelease, tag_name=release.tag_name)
6172
return 0
6273

6374
if __name__ == '__main__':

0 commit comments

Comments
 (0)