4
4
from actions_toolkit import core as actions_toolkit
5
5
from github import Github
6
6
from github .GithubException import GithubException
7
- from github . GitRelease import GitRelease
8
- from packaging . version import InvalidVersion
9
- from packaging . version import parse as parse_version
7
+
8
+ from gha_clone_releases . utils . assets import download_asset
9
+ from gha_clone_releases . utils . releases import get_missing_releases
10
10
11
11
# This code is automatically generated by actions.yml and make generate-inputs
12
12
###START_INPUT_AUTOMATION###
20
20
},
21
21
"skip_draft" : {"description" : "Skip draft releases" , "default" : False },
22
22
"skip_prerelease" : {"description" : "Skip Prereleases" , "default" : False },
23
+ "copy_assets" : {
24
+ "description" : "If true, copy assets from source repo releases to the newly created releases" ,
25
+ "default" : False ,
26
+ },
23
27
"limit" : {
24
28
"description" : "A limit of how many releases to add on a single run. Good for not overwhelming CI systems" ,
25
29
"default" : 0 ,
@@ -79,6 +83,11 @@ def get_inputs() -> dict[str, Any]:
79
83
if isinstance (parsed_inputs ["skip_prerelease" ], str )
80
84
else parsed_inputs ["skip_prerelease" ]
81
85
)
86
+ parsed_inputs ["copy_assets" ] = (
87
+ parsed_inputs ["copy_assets" ].lower () == "true"
88
+ if isinstance (parsed_inputs ["copy_assets" ], str )
89
+ else parsed_inputs ["copy_assets" ]
90
+ )
82
91
parsed_inputs ["dest_repo" ] = (
83
92
os .environ .get ("GITHUB_REPOSITORY" ) if parsed_inputs ["dest_repo" ] is None else parsed_inputs ["dest_repo" ]
84
93
)
@@ -87,46 +96,6 @@ def get_inputs() -> dict[str, Any]:
87
96
return parsed_inputs
88
97
89
98
90
- class ReleaseWrapper :
91
- def __init__ (self , release : GitRelease ):
92
- self .release = release
93
-
94
- def __eq__ (self , other_release : GitRelease ):
95
- return self .release .title == other_release .release .title
96
-
97
- def __hash__ (self ):
98
- return hash (self .release .title )
99
-
100
-
101
- def exceeds_min_version (release_version : str , min_version : str ):
102
- """Checks if a version exceeds a minimum version using packaging.version.parse"""
103
- if min_version is not None :
104
- try :
105
- result = parse_version (release_version ) > parse_version (min_version )
106
- except InvalidVersion as exc :
107
- actions_toolkit .error (f"{ release_version } Is an invalid version { exc } " )
108
- return False
109
- actions_toolkit .debug (f"{ release_version } exceeds_min_version result { result } " )
110
- return result
111
- return True
112
-
113
-
114
- def get_missing_releases (source_releases , dest_releases , min_version ) -> list [GitRelease ]:
115
- """Compares two sets of releases and returns a list of releases in the source that are not in the destination"""
116
-
117
- def sort_key (release : GitRelease ):
118
- return release .title
119
-
120
- source_releases = {
121
- ReleaseWrapper (release ) for release in source_releases if exceeds_min_version (release .title , min_version )
122
- }
123
- dest_releases = {ReleaseWrapper (release ) for release in dest_releases }
124
-
125
- releases = [release .release for release in list (source_releases - dest_releases )]
126
- releases .sort (key = lambda release : release .published_at , reverse = True )
127
- return releases
128
-
129
-
130
99
def main ():
131
100
"""Get all releases from a source repo and create them on
132
101
the repo we are running this action in
@@ -165,7 +134,7 @@ def main():
165
134
actions_toolkit .info (f"Adding { release .tag_name } to { inputs ['dest_repo' ]} " )
166
135
target = this_repo .default_branch if inputs ["target" ] is None else inputs ["target" ]
167
136
try :
168
- this_repo .create_git_release (
137
+ new_release = this_repo .create_git_release (
169
138
tag = release .tag_name ,
170
139
name = release .title ,
171
140
message = release .body ,
@@ -176,6 +145,13 @@ def main():
176
145
added_releases .append (release .tag_name )
177
146
except GithubException as exc :
178
147
actions_toolkit .error (f"Error while adding a release for { release .tag_name } . { exc } " )
148
+ if inputs ["copy_assets" ]:
149
+ for asset in release .assets :
150
+ try :
151
+ this_asset = download_asset (asset_name = asset .name , asset_url = asset .browser_download_url )
152
+ new_release .upload_asset (this_asset )
153
+ except Exception as exc :
154
+ actions_toolkit .error (f"Error while copying asset { asset .name } . { exc } " )
179
155
actions_toolkit .set_output ("addedReleases" , "," .join (added_releases ))
180
156
actions_toolkit .set_output ("skippedReleasesCount" , skipped )
181
157
actions_toolkit .set_output ("addedReleasesCount" , len (added_releases ))
0 commit comments