Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
289ce65431 | ||
|
|
704ce3bef2 |
84
build.py
84
build.py
@@ -321,50 +321,67 @@ def _tag_version_key(tag_name: str):
|
||||
|
||||
|
||||
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()
|
||||
if not auth:
|
||||
return
|
||||
|
||||
# List all releases
|
||||
# --- Clean releases ---
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
f"{_GITEA_API}/releases?limit=50",
|
||||
headers=auth,
|
||||
)
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
# Sort by semver
|
||||
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}
|
||||
|
||||
removed = []
|
||||
for r in releases:
|
||||
if r["id"] in keep_ids:
|
||||
removed_tags = []
|
||||
for tag in tags:
|
||||
name = tag.get("name", "")
|
||||
if name in keep_tags:
|
||||
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}")
|
||||
f"{_GITEA_API}/tags/{name}", headers=auth, method="DELETE")
|
||||
urllib.request.urlopen(req, timeout=10)
|
||||
removed_tags.append(name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if removed:
|
||||
print(f"Cleaned {len(removed)} old Gitea releases: {', '.join(removed)}")
|
||||
if removed_tags:
|
||||
print(f"Cleaned {len(removed_tags)} orphan Gitea tags: {', '.join(removed_tags)}")
|
||||
|
||||
|
||||
def cleanup_old_releases():
|
||||
@@ -383,9 +400,20 @@ def cleanup_old_releases():
|
||||
keep = set([first] + last_5)
|
||||
|
||||
removed = []
|
||||
_flags = subprocess.CREATE_NO_WINDOW if sys.platform == "win32" else 0
|
||||
for f in all_exes:
|
||||
if f not in keep:
|
||||
os.remove(f)
|
||||
# Use git rm so deletion is staged for commit
|
||||
try:
|
||||
subprocess.run(
|
||||
["git", "rm", "-f", "--quiet", f],
|
||||
cwd=PROJECT_DIR, creationflags=_flags,
|
||||
capture_output=True,
|
||||
)
|
||||
except Exception:
|
||||
# Fallback: just delete the file
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
removed.append(os.path.basename(f))
|
||||
|
||||
if removed:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
"""Version info for ServerManager."""
|
||||
|
||||
__version__ = "1.9.11"
|
||||
__version__ = "1.9.12"
|
||||
__app_name__ = "ServerManager"
|
||||
__author__ = "aibot777"
|
||||
__description__ = "Desktop GUI for managing remote servers"
|
||||
|
||||
Reference in New Issue
Block a user