Prune admin-ui-dist artifacts; drop Playwright report zips.
Refs EventHub/EventHubFrontAdmin#42
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env bash
|
||||
# Delete Gitea Actions artifacts by exact name (keep newest N).
|
||||
# Usage: prune-gitea-artifacts.sh <owner/repo> <artifact-name> [keep_last]
|
||||
# Env: GITEA_BASE_URL, GITEA_TOKEN (or REGISTRY_PASSWORD)
|
||||
set -euo pipefail
|
||||
|
||||
REPO="${1:?owner/repo e.g. EventHub/EventHubFront}"
|
||||
NAME_FILTER="${2:?artifact name}"
|
||||
KEEP_LAST="${3:-0}"
|
||||
BASE="${GITEA_BASE_URL:-https://git.sabilin.com}"
|
||||
TOKEN="${GITEA_TOKEN:-${REGISTRY_PASSWORD:-}}"
|
||||
|
||||
if [[ -z "${TOKEN}" ]]; then
|
||||
echo "prune-gitea-artifacts: no token — skip" >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
python3 - "${BASE}" "${TOKEN}" "${REPO}" "${NAME_FILTER}" "${KEEP_LAST}" <<'PY'
|
||||
import json, os, sys, urllib.request, urllib.error
|
||||
|
||||
base, token, repo, name_filter, keep_last = sys.argv[1:6]
|
||||
keep_last = int(keep_last)
|
||||
headers = {"Authorization": f"token {token}", "Accept": "application/json"}
|
||||
|
||||
def get(url):
|
||||
req = urllib.request.Request(url, headers=headers)
|
||||
with urllib.request.urlopen(req, timeout=60) as resp:
|
||||
return json.load(resp)
|
||||
|
||||
def delete(url):
|
||||
req = urllib.request.Request(url, headers=headers, method="DELETE")
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=60) as resp:
|
||||
return resp.status
|
||||
except urllib.error.HTTPError as e:
|
||||
return e.code
|
||||
|
||||
arts = []
|
||||
page = 1
|
||||
while page <= 40:
|
||||
url = f"{base.rstrip('/')}/api/v1/repos/{repo}/actions/artifacts?limit=50&page={page}"
|
||||
try:
|
||||
data = get(url)
|
||||
except Exception as exc:
|
||||
print(f"prune-gitea-artifacts: list failed: {exc}", file=sys.stderr)
|
||||
sys.exit(0)
|
||||
batch = data if isinstance(data, list) else (data.get("artifacts") or data.get("data") or [])
|
||||
if not batch:
|
||||
break
|
||||
for a in batch:
|
||||
n = str(a.get("name") or "")
|
||||
if n == name_filter or n.startswith(name_filter):
|
||||
arts.append(a)
|
||||
if len(batch) < 50:
|
||||
break
|
||||
page += 1
|
||||
|
||||
# Prefer newest first by id desc
|
||||
arts.sort(key=lambda a: int(a.get("id") or 0), reverse=True)
|
||||
to_delete = arts[keep_last:]
|
||||
print(f"prune-gitea-artifacts: {repo} name={name_filter} matched={len(arts)} delete={len(to_delete)} keep={keep_last}")
|
||||
for a in to_delete:
|
||||
aid = a.get("id")
|
||||
code = delete(f"{base.rstrip('/')}/api/v1/repos/{repo}/actions/artifacts/{aid}")
|
||||
print(f" delete id={aid} name={a.get('name')} http={code}")
|
||||
PY
|
||||
Reference in New Issue
Block a user