mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 04:00:01 +00:00
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
import os
|
|
import sys
|
|
from typing import Any, Dict, Optional
|
|
import tomllib
|
|
import packaging.version
|
|
import requests
|
|
|
|
sys.path.append(os.getcwd())
|
|
|
|
ACCESS_TOKEN: Optional[str] = os.getenv("GH_TOKEN", None)
|
|
|
|
GITHUB_REQUEST_CONFIG = {
|
|
"Accept": "application/vnd.github.v3+json",
|
|
"Authorization": f"token {ACCESS_TOKEN}",
|
|
"X-GitHub-Api-Version": "2022-11-28",
|
|
}
|
|
REPO_OWNER_USERNAME: str = "Magnus167"
|
|
REPO_NAME: str = "rustframe"
|
|
REPOSITORY_WEB_LINK: str = f"github.com/{REPO_OWNER_USERNAME}/{REPO_NAME}"
|
|
|
|
CARGO_TOML_PATH: str = "Cargo.toml"
|
|
|
|
|
|
def load_cargo_toml() -> Dict[str, Any]:
|
|
if not os.path.exists(CARGO_TOML_PATH):
|
|
raise FileNotFoundError(f"{CARGO_TOML_PATH} does not exist.")
|
|
|
|
with open(CARGO_TOML_PATH, "rb") as file:
|
|
return tomllib.load(file)
|
|
|
|
def get_latest_crates_io_version() -> str:
|
|
url = "https://crates.io/api/v1/crates/rustframe"
|
|
try:
|
|
response = requests.get(url, headers=GITHUB_REQUEST_CONFIG)
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
return data["crate"]["max_version"]
|
|
except requests.RequestException as e:
|
|
raise RuntimeError(f"Failed to fetch latest version from crates.io: {e}")
|
|
|
|
|
|
def get_current_version() -> str:
|
|
cargo_toml = load_cargo_toml()
|
|
version = cargo_toml.get("package", {}).get("version", None)
|
|
if not version:
|
|
raise ValueError("Version not found in Cargo.toml")
|
|
return version
|
|
|
|
|
|
def check_version() -> None:
|
|
latest_version = get_latest_crates_io_version()
|
|
latest_version_tuple = packaging.version.parse(latest_version)
|
|
current_version = get_current_version()
|
|
current_version_tuple = packaging.version.parse(current_version)
|
|
|
|
# if the current version is >= latest, exit 1
|
|
if latest_version_tuple >= current_version_tuple:
|
|
sys.exit(1)
|
|
|
|
print(f"Current version: {current_version_tuple}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
check_version()
|