v1.9.12: cleanup orphan Gitea tags alongside old releases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
71
build.py
71
build.py
@@ -321,50 +321,67 @@ def _tag_version_key(tag_name: str):
|
|||||||
|
|
||||||
|
|
||||||
def cleanup_gitea_releases():
|
def cleanup_gitea_releases():
|
||||||
"""Keep the first release (v1.0.0) and the last 5 releases on Gitea, delete the rest."""
|
"""Keep the first release (v1.0.0) and the last 5 on Gitea, delete the rest + orphan tags."""
|
||||||
auth = _get_gitea_auth()
|
auth = _get_gitea_auth()
|
||||||
if not auth:
|
if not auth:
|
||||||
return
|
return
|
||||||
|
|
||||||
# List all releases
|
# --- Clean releases ---
|
||||||
try:
|
try:
|
||||||
req = urllib.request.Request(
|
req = urllib.request.Request(f"{_GITEA_API}/releases?limit=50", headers=auth)
|
||||||
f"{_GITEA_API}/releases?limit=50",
|
|
||||||
headers=auth,
|
|
||||||
)
|
|
||||||
resp = urllib.request.urlopen(req, timeout=30)
|
resp = urllib.request.urlopen(req, timeout=30)
|
||||||
releases = json.loads(resp.read())
|
releases = json.loads(resp.read())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Gitea release list failed: {e}")
|
print(f"Gitea release list failed: {e}")
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(releases) <= 6:
|
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
|
return
|
||||||
|
|
||||||
# Sort by semver
|
removed_tags = []
|
||||||
releases.sort(key=lambda r: _tag_version_key(r.get("tag_name", "")))
|
for tag in tags:
|
||||||
|
name = tag.get("name", "")
|
||||||
first = releases[0]
|
if name in keep_tags:
|
||||||
last_5 = releases[-5:]
|
|
||||||
keep_ids = {first["id"]} | {r["id"] for r in last_5}
|
|
||||||
|
|
||||||
removed = []
|
|
||||||
for r in releases:
|
|
||||||
if r["id"] in keep_ids:
|
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
req = urllib.request.Request(
|
req = urllib.request.Request(
|
||||||
f"{_GITEA_API}/releases/{r['id']}",
|
f"{_GITEA_API}/tags/{name}", headers=auth, method="DELETE")
|
||||||
headers=auth,
|
urllib.request.urlopen(req, timeout=10)
|
||||||
method="DELETE",
|
removed_tags.append(name)
|
||||||
)
|
except Exception:
|
||||||
urllib.request.urlopen(req, timeout=15)
|
pass
|
||||||
removed.append(r.get("tag_name", "?"))
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Failed to delete Gitea release {r.get('tag_name')}: {e}")
|
|
||||||
|
|
||||||
if removed:
|
if removed_tags:
|
||||||
print(f"Cleaned {len(removed)} old Gitea releases: {', '.join(removed)}")
|
print(f"Cleaned {len(removed_tags)} orphan Gitea tags: {', '.join(removed_tags)}")
|
||||||
|
|
||||||
|
|
||||||
def cleanup_old_releases():
|
def cleanup_old_releases():
|
||||||
|
|||||||
BIN
releases/ServerManager-v1.9.12-win-x64.exe
Normal file
BIN
releases/ServerManager-v1.9.12-win-x64.exe
Normal file
Binary file not shown.
@@ -1,6 +1,6 @@
|
|||||||
"""Version info for ServerManager."""
|
"""Version info for ServerManager."""
|
||||||
|
|
||||||
__version__ = "1.9.11"
|
__version__ = "1.9.12"
|
||||||
__app_name__ = "ServerManager"
|
__app_name__ = "ServerManager"
|
||||||
__author__ = "aibot777"
|
__author__ = "aibot777"
|
||||||
__description__ = "Desktop GUI for managing remote servers"
|
__description__ = "Desktop GUI for managing remote servers"
|
||||||
|
|||||||
Reference in New Issue
Block a user