mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-15 17:30:13 +08:00
fix(updator): skip update prompt when prerelease version >= latest stable
When user installs a dev/beta/alpha/rc version (e.g. 4.25.0-dev), check_update would skip prerelease releases and compare against the latest stable (e.g. 4.24.0). Since 4.25.0-dev > 4.24.0 in semver comparison (numeric part takes precedence), it incorrectly prompted to update. Now checks if current version is prerelease and already newer than the latest stable - in that case, no update prompt is shown. Fixes: update button shown to users running dev/unstable versions
This commit is contained in:
@@ -112,6 +112,16 @@ class RepoZipUpdator:
|
||||
"""Semver 版本比较"""
|
||||
return VersionComparator.compare_version(v1, v2)
|
||||
|
||||
def _is_prerelease_version(self, version: str) -> bool:
|
||||
"""Check if a version string is a prerelease version."""
|
||||
return bool(
|
||||
re.search(
|
||||
r"[\-_.]?(alpha|beta|rc|dev)[\-_.]?\d*$",
|
||||
version,
|
||||
re.IGNORECASE,
|
||||
)
|
||||
)
|
||||
|
||||
async def check_update(
|
||||
self,
|
||||
url: str,
|
||||
@@ -120,13 +130,16 @@ class RepoZipUpdator:
|
||||
) -> ReleaseInfo | None:
|
||||
update_data = await self.fetch_release_info(url)
|
||||
|
||||
# Check if current version is a prerelease
|
||||
current_is_prerelease = self._is_prerelease_version(current_version)
|
||||
|
||||
sel_release_data = None
|
||||
if consider_prerelease:
|
||||
tag_name = update_data[0]["tag_name"]
|
||||
sel_release_data = update_data[0]
|
||||
else:
|
||||
for data in update_data:
|
||||
# 跳过带有 alpha、beta 等预发布标签的版本
|
||||
# Skip prerelease versions when not considering them
|
||||
if re.search(
|
||||
r"[\-_.]?(alpha|beta|rc|dev)[\-_.]?\d*$",
|
||||
data["tag_name"],
|
||||
@@ -141,6 +154,13 @@ class RepoZipUpdator:
|
||||
logger.error("未找到合适的发布版本")
|
||||
return None
|
||||
|
||||
# If current version is a prerelease and we're comparing against stable,
|
||||
# check if current version is already newer than the latest stable
|
||||
if current_is_prerelease and not self._is_prerelease_version(tag_name):
|
||||
if self.compare_version(current_version, tag_name) >= 0:
|
||||
# Current prerelease version is >= latest stable, no update needed
|
||||
return None
|
||||
|
||||
if self.compare_version(current_version, tag_name) >= 0:
|
||||
return None
|
||||
return ReleaseInfo(
|
||||
|
||||
Reference in New Issue
Block a user