diff --git a/build.py b/build.py index 6ba966a..f61a7e3 100644 --- a/build.py +++ b/build.py @@ -182,9 +182,8 @@ def build(): # Auto-deploy: sync shared files so Claude Code always has the latest deploy_shared_files() - # Publish release to Gitea + cleanup old remote releases + # Publish release to Gitea publish_gitea_release(dst) - cleanup_gitea_releases() def _get_gitea_auth() -> dict: @@ -312,77 +311,6 @@ def _version_key(path: str): return (0, 0, 0) -def _tag_version_key(tag_name: str): - """Extract (major, minor, patch) from tag like 'v1.9.5'.""" - m = re.match(r'v(\d+)\.(\d+)\.(\d+)', tag_name) - if m: - return (int(m.group(1)), int(m.group(2)), int(m.group(3))) - return (0, 0, 0) - - -def cleanup_gitea_releases(): - """Keep the first release (v1.0.0) and the last 5 on Gitea, delete the rest + orphan tags.""" - auth = _get_gitea_auth() - if not auth: - return - - # --- Clean releases --- - try: - req = urllib.request.Request(f"{_GITEA_API}/releases?limit=50", headers=auth) - resp = urllib.request.urlopen(req, timeout=30) - releases = json.loads(resp.read()) - except Exception as e: - print(f"Gitea release list failed: {e}") - return - - keep_tags = set() - if len(releases) > 6: - releases.sort(key=lambda r: _tag_version_key(r.get("tag_name", ""))) - first = releases[0] - last_5 = releases[-5:] - keep_ids = {first["id"]} | {r["id"] for r in last_5} - keep_tags = {first.get("tag_name")} | {r.get("tag_name") for r in last_5} - - removed = [] - for r in releases: - if r["id"] in keep_ids: - continue - try: - req = urllib.request.Request( - f"{_GITEA_API}/releases/{r['id']}", headers=auth, method="DELETE") - urllib.request.urlopen(req, timeout=15) - removed.append(r.get("tag_name", "?")) - except Exception as e: - print(f"Failed to delete Gitea release {r.get('tag_name')}: {e}") - if removed: - print(f"Cleaned {len(removed)} old Gitea releases: {', '.join(removed)}") - else: - keep_tags = {r.get("tag_name") for r in releases} - - # --- Clean orphan tags (tags without releases) --- - try: - req = urllib.request.Request(f"{_GITEA_API}/tags?limit=50", headers=auth) - resp = urllib.request.urlopen(req, timeout=30) - tags = json.loads(resp.read()) - except Exception: - return - - removed_tags = [] - for tag in tags: - name = tag.get("name", "") - if name in keep_tags: - continue - try: - req = urllib.request.Request( - f"{_GITEA_API}/tags/{name}", headers=auth, method="DELETE") - urllib.request.urlopen(req, timeout=10) - removed_tags.append(name) - except Exception: - pass - - if removed_tags: - print(f"Cleaned {len(removed_tags)} orphan Gitea tags: {', '.join(removed_tags)}") - def cleanup_old_releases(): """Keep the first release (v1.0.0) and the last 5 releases, delete the rest.""" diff --git a/releases/ServerManager-v1.9.8-win-x64.exe b/releases/ServerManager-v1.9.13-win-x64.exe similarity index 98% rename from releases/ServerManager-v1.9.8-win-x64.exe rename to releases/ServerManager-v1.9.13-win-x64.exe index 22929c0..399a4df 100644 Binary files a/releases/ServerManager-v1.9.8-win-x64.exe and b/releases/ServerManager-v1.9.13-win-x64.exe differ diff --git a/version.py b/version.py index c8b3d1a..497d438 100755 --- a/version.py +++ b/version.py @@ -1,6 +1,6 @@ """Version info for ServerManager.""" -__version__ = "1.9.12" +__version__ = "1.9.13" __app_name__ = "ServerManager" __author__ = "aibot777" __description__ = "Desktop GUI for managing remote servers"