6
6
if TYPE_CHECKING :
7
7
from argparse import Namespace
8
8
9
- def generate_release_notes ( ) -> str :
9
+ def generate_release_note ( previous_release_tag : str ) -> str :
10
10
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 )
12
12
13
13
if cp .returncode != 0 :
14
14
raise Exception (f"Error generating release notes: { cp .stderr .decode ('utf-8' )} " )
@@ -20,6 +20,7 @@ def main(args: Namespace) -> int:
20
20
import semantic_version # type: ignore
21
21
import re
22
22
import sys
23
+ from functools import cmp_to_key
23
24
24
25
repo = Github (auth = Auth .Token (args .github_token )).get_repo (args .repo )
25
26
@@ -55,10 +56,19 @@ def main(args: Namespace) -> int:
55
56
return 1
56
57
release = candidate_releases [0 ]
57
58
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 } " )
59
68
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 )
61
70
71
+ release .update_release (name = release .title , message = release_notes , draft = release .draft , prerelease = release .prerelease , tag_name = release .tag_name )
62
72
return 0
63
73
64
74
if __name__ == '__main__' :
0 commit comments