74 lines
1.9 KiB
Python
Executable File
74 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env -S uv run --script
|
|
# /// script
|
|
# requires-python = ">=3.11"
|
|
# dependencies = ["nanobot-ai"]
|
|
# ///
|
|
"""Check latest nanobot version from PyPI, GitHub releases, and Docker Hub."""
|
|
|
|
import importlib.metadata
|
|
import json
|
|
import sys
|
|
from urllib.error import URLError
|
|
from urllib.request import Request, urlopen
|
|
|
|
try:
|
|
CURRENT_VERSION = importlib.metadata.version("nanobot-ai")
|
|
except importlib.metadata.PackageNotFoundError:
|
|
CURRENT_VERSION = "unknown"
|
|
|
|
USER_AGENT = "nanobot-version-check/1.0"
|
|
|
|
|
|
def fetch_json(url: str, timeout: int = 10) -> dict | None:
|
|
req = Request(url, headers={"User-Agent": USER_AGENT})
|
|
try:
|
|
with urlopen(req, timeout=timeout) as resp:
|
|
return json.loads(resp.read())
|
|
except (URLError, json.JSONDecodeError, OSError) as e:
|
|
print(f" Error fetching {url}: {e}", file=sys.stderr)
|
|
return None
|
|
|
|
|
|
def check_pypi() -> str | None:
|
|
data = fetch_json("https://pypi.org/pypi/nanobot-ai/json")
|
|
if data:
|
|
return data.get("info", {}).get("version")
|
|
return None
|
|
|
|
|
|
def check_github() -> str | None:
|
|
data = fetch_json("https://api.github.com/repos/HKUDS/nanobot/releases/latest")
|
|
if data:
|
|
tag = data.get("tag_name", "")
|
|
return tag.lstrip("v") if tag else None
|
|
return None
|
|
|
|
|
|
def check_docker() -> str | None:
|
|
data = fetch_json("https://hub.docker.com/v2/repositories/smanx/nanobot/tags?page_size=10")
|
|
if data:
|
|
for tag in data.get("results", []):
|
|
name = tag.get("name", "")
|
|
if name and name != "latest":
|
|
return name
|
|
return None
|
|
|
|
|
|
def main():
|
|
print(f"Current nanobot version: {CURRENT_VERSION}")
|
|
|
|
pypi = check_pypi()
|
|
if pypi:
|
|
print(f"Latest PyPI version: {pypi}")
|
|
|
|
github = check_github()
|
|
if github:
|
|
print(f"Latest GitHub release: {github}")
|
|
|
|
docker = check_docker()
|
|
if docker:
|
|
print(f"Latest Docker Hub version tag: {docker}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |