66if 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
@@ -55,10 +56,19 @@ def main(args: Namespace) -> int:
5556 return 1
5657 release = candidate_releases [0 ]
5758
58- release_notes = generate_release_notes ()
59+ # All the releases that are not draft and have a valid semantic version tag
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 } " )
5968
60- 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 )
6170
71+ release .update_release (name = release .title , message = release_notes , draft = release .draft , prerelease = release .prerelease , tag_name = release .tag_name )
6272 return 0
6373
6474if __name__ == '__main__' :
0 commit comments