refactor: move version checker to metadata

This commit is contained in:
2026-08-05 15:33:02 +08:00
parent a72a685c84
commit 816e3a59d0
2 changed files with 27 additions and 20 deletions
+9 -13
View File
@@ -1,7 +1,6 @@
import logging
import sys
from pathlib import Path
from .utils import VERSION
from .cli import Cli, parse as parse_cli
from .artifact import (
ArtifactContext,
@@ -22,21 +21,9 @@ class App:
def __init__(self, opts: Cli) -> None:
# assign cli options
self.__opts = opts
# initialize packer
try:
# build essential instances
self.__extractor = MetadataExtractor(self.__opts.manifest)
self.__ctx = ArtifactContext(self.__extractor)
# check version
metadata = self.__ctx.metadata
if metadata.min_version is not None:
if metadata.min_version > VERSION:
raise RuntimeError(
f"requested minimum version is not fulfilled. {metadata.min_version} required got {VERSION}"
)
except Exception as e:
logging.error(f"fail to initialize packer: %s", e)
sys.exit(1)
def run(self) -> None:
# create distribution
@@ -71,5 +58,14 @@ def main() -> None:
# setup logging
logging.basicConfig(format="[%(levelname)s] %(message)s", level=logging.INFO)
# initialize packer and run
try:
app = App(opts)
except Exception as e:
logging.error("fail to initialize packer: %s", e)
sys.exit(1)
try:
app.run()
except Exception as e:
logging.error("packer runtime error: %s", e)
sys.exit(1)
+13 -2
View File
@@ -7,7 +7,7 @@ from pathlib import Path
from typing import Any, Callable
from semver import Version
from . import utils
from .utils import dict_chain_get, dict_typed_get, dict_typed_get_required
from .utils import dict_chain_get, dict_typed_get, dict_typed_get_required, VERSION
@dataclass(frozen=True)
@@ -62,6 +62,15 @@ class Metadata:
cmake: MetadataCMake | None
pkgconfig: MetadataPkgConfig | None
def __post_init__(self) -> None:
# check version restriction
this_version = self.min_version
if this_version is not None:
if this_version > VERSION:
raise RuntimeError(
f"requested minimum version is not fulfilled. {this_version} required got {VERSION}"
)
@staticmethod
def from_dict(d: dict[str, Any]) -> "Metadata":
raw_min_version = dict_typed_get(d, "min_version", str)
@@ -192,7 +201,9 @@ class MetadataExtractor:
@wrap_metadata_errors
def get_target_directory(self) -> Path:
"""Get the absolute path to directory where Rust target directory is"""
raw_target_directory = dict_typed_get_required(self.__metadata, "target_directory", str)
raw_target_directory = dict_typed_get_required(
self.__metadata, "target_directory", str
)
return Path(raw_target_directory)
@wrap_metadata_errors