fix:解析预发布版版本号
This commit is contained in:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "MaiBot"
|
name = "MaiBot"
|
||||||
version = "1.0.0"
|
version = "1.0.0-pre.16"
|
||||||
description = "MaiCore 是一个基于大语言模型的可交互智能体"
|
description = "MaiCore 是一个基于大语言模型的可交互智能体"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
@@ -1169,6 +1169,8 @@ class TestVersionComparator:
|
|||||||
|
|
||||||
assert VersionComparator.normalize_version("0.8.0-snapshot.1") == "0.8.0"
|
assert VersionComparator.normalize_version("0.8.0-snapshot.1") == "0.8.0"
|
||||||
assert VersionComparator.normalize_version("1.2") == "1.2.0"
|
assert VersionComparator.normalize_version("1.2") == "1.2.0"
|
||||||
|
assert VersionComparator.normalize_version("1.0.0rc16") == "1.0.0"
|
||||||
|
assert VersionComparator.normalize_version("1.0.0-pre.16") == "1.0.0"
|
||||||
assert VersionComparator.normalize_version("") == "0.0.0"
|
assert VersionComparator.normalize_version("") == "0.0.0"
|
||||||
|
|
||||||
def test_compare(self):
|
def test_compare(self):
|
||||||
|
|||||||
@@ -47,6 +47,15 @@ class VersionComparator:
|
|||||||
return "0.0.0"
|
return "0.0.0"
|
||||||
|
|
||||||
normalized = re.sub(r"-snapshot\.\d+", "", str(version).strip())
|
normalized = re.sub(r"-snapshot\.\d+", "", str(version).strip())
|
||||||
|
try:
|
||||||
|
parsed_version = Version(normalized)
|
||||||
|
parts = [str(part) for part in parsed_version.release[:3]]
|
||||||
|
while len(parts) < 3:
|
||||||
|
parts.append("0")
|
||||||
|
return ".".join(parts)
|
||||||
|
except InvalidVersion:
|
||||||
|
pass
|
||||||
|
|
||||||
if not re.match(r"^\d+(\.\d+){0,2}$", normalized):
|
if not re.match(r"^\d+(\.\d+){0,2}$", normalized):
|
||||||
return "0.0.0"
|
return "0.0.0"
|
||||||
|
|
||||||
@@ -132,6 +141,17 @@ class VersionComparator:
|
|||||||
"""
|
"""
|
||||||
return bool(_SEMVER_PATTERN.fullmatch(str(version or "").strip()))
|
return bool(_SEMVER_PATTERN.fullmatch(str(version or "").strip()))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_valid_project_version(version: str) -> bool:
|
||||||
|
"""判断主程序或 SDK 的项目版本号是否可被解析。
|
||||||
|
|
||||||
|
``pyproject.toml`` 遵循 Python 包版本规范,允许 ``1.0.0rc16`` 或
|
||||||
|
``1.0.0-pre.16`` 这类预发布版本;兼容性比较时只取其 release 部分。
|
||||||
|
"""
|
||||||
|
|
||||||
|
normalized = VersionComparator.normalize_version(version)
|
||||||
|
return normalized != "0.0.0" or str(version or "").strip() == "0.0.0"
|
||||||
|
|
||||||
|
|
||||||
class _StrictManifestModel(BaseModel):
|
class _StrictManifestModel(BaseModel):
|
||||||
"""Manifest 解析使用的严格基类模型。"""
|
"""Manifest 解析使用的严格基类模型。"""
|
||||||
@@ -1030,7 +1050,7 @@ class ManifestValidator:
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
raw_version = str(project_data.get("version", "") or "").strip()
|
raw_version = str(project_data.get("version", "") or "").strip()
|
||||||
if VersionComparator.is_valid_semver(raw_version):
|
if VersionComparator.is_valid_project_version(raw_version):
|
||||||
return raw_version
|
return raw_version
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@@ -1047,7 +1067,7 @@ class ManifestValidator:
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
raw_version = importlib_metadata.version("maibot-plugin-sdk")
|
raw_version = importlib_metadata.version("maibot-plugin-sdk")
|
||||||
if VersionComparator.is_valid_semver(raw_version):
|
if VersionComparator.is_valid_project_version(raw_version):
|
||||||
return raw_version
|
return raw_version
|
||||||
except importlib_metadata.PackageNotFoundError:
|
except importlib_metadata.PackageNotFoundError:
|
||||||
pass
|
pass
|
||||||
@@ -1064,7 +1084,7 @@ class ManifestValidator:
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
raw_version = str(project_data.get("version", "") or "").strip()
|
raw_version = str(project_data.get("version", "") or "").strip()
|
||||||
if VersionComparator.is_valid_semver(raw_version):
|
if VersionComparator.is_valid_project_version(raw_version):
|
||||||
return raw_version
|
return raw_version
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user