Skip to content

Commit e60d25a

Browse files
authored
Merge pull request #84 from saadmk11/fix-lagacy-version-issue
Warn users when GitHub Release do not use Semantic Versioning specification
2 parents 83f971d + c2ac0bd commit e60d25a

1 file changed

Lines changed: 44 additions & 26 deletions

File tree

src/main.py

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)