@@ -226,11 +226,20 @@ def _get_github_releases(self, action_repository: str) -> list[dict[str, Any]]:
226226 response_data = response .json ()
227227
228228 if response_data :
229- # Sort through the releases returned
230- # by GitHub API using tag_name
229+ releases = [
230+ {
231+ "published_at" : release ["published_at" ],
232+ "html_url" : release ["html_url" ],
233+ "tag_name" : release ["tag_name" ],
234+ "tag_name_parsed" : parse (release ["tag_name" ]),
235+ }
236+ for release in response_data
237+ if not release ["prerelease" ]
238+ ]
239+ # Sort through the releases returned by GitHub API using tag_name
231240 return sorted (
232- filter ( lambda r : not r [ "prerelease" ], response_data ) ,
233- key = lambda r : parse ( r ["tag_name" ]) ,
241+ releases ,
242+ key = lambda r : r ["tag_name_parsed" ] ,
234243 reverse = True ,
235244 )
236245
@@ -253,19 +262,19 @@ def _release_filter_function(self):
253262 checks = []
254263
255264 if ReleaseType .MAJOR in self .user_config .release_types :
256- checks .append (lambda r , c : parse ( r ["tag_name" ]) .major > c .major )
265+ checks .append (lambda r , c : r ["tag_name_parsed" ] .major > c .major )
257266
258267 if ReleaseType .MINOR in self .user_config .release_types :
259268 checks .append (
260- lambda r , c : parse ( r ["tag_name" ]) .major == c .major
261- and parse ( r ["tag_name" ]) .minor > c .minor ,
269+ lambda r , c : r ["tag_name_parsed" ] .major == c .major
270+ and r ["tag_name_parsed" ] .minor > c .minor ,
262271 )
263272
264273 if ReleaseType .PATCH in self .user_config .release_types :
265274 checks .append (
266- lambda r , c : parse ( r ["tag_name" ]) .major == c .major
267- and parse ( r ["tag_name" ]) .minor == c .minor
268- and parse ( r ["tag_name" ]) .micro > c .micro
275+ lambda r , c : r ["tag_name_parsed" ] .major == c .major
276+ and r ["tag_name_parsed" ] .minor == c .minor
277+ and r ["tag_name_parsed" ] .micro > c .micro
269278 )
270279
271280 def filter_func (release_tag : str , current_version : Version ) -> bool :
@@ -278,31 +287,40 @@ def _get_latest_version_release(
278287 ) -> dict [str , str ]:
279288 """Get the latest release"""
280289 github_releases = self ._get_github_releases (action_repository )
290+ latest_release : dict [str , Any ] = {}
281291
282292 if not github_releases :
283- return {}
293+ return latest_release
284294
285295 parsed_current_version : LegacyVersion | Version = parse (current_version )
286- latest_release : dict [str , Any ]
287296
288297 if isinstance (parsed_current_version , LegacyVersion ):
298+ gha_utils .warning (
299+ f"Current version (`{ current_version } `) of `{ action_repository } ` does not follow "
300+ "Semantic Versioning specification. This can yield unexpected results, "
301+ "please be careful while using the updates suggested by this action."
302+ )
289303 latest_release = github_releases [0 ]
290304 else :
291- latest_release = next (
292- filter (
293- lambda r : self ._release_filter_function (r , parsed_current_version ),
294- github_releases ,
295- ),
296- {},
297- )
305+ try :
306+ latest_release = next (
307+ filter (
308+ lambda r : self ._release_filter_function (
309+ r , parsed_current_version
310+ ),
311+ github_releases ,
312+ ),
313+ {},
314+ )
315+ except AttributeError :
316+ latest_release = github_releases [0 ]
317+ gha_utils .warning (
318+ f"GitHub releases of `{ action_repository } ` does not follow "
319+ "Semantic Versioning specification. This can yield unexpected results, "
320+ "please be careful while using the updates suggested by this action."
321+ )
298322
299- if latest_release :
300- return {
301- "published_at" : latest_release ["published_at" ],
302- "html_url" : latest_release ["html_url" ],
303- "tag_name" : latest_release ["tag_name" ],
304- }
305- return {}
323+ return latest_release
306324
307325 def _get_commit_data (
308326 self , action_repository : str , tag_or_branch_name : str
0 commit comments