ci: add manual cleanup-packages workflow to purge old registry versions
All checks were successful
Android Build & Publish / android (push) Successful in 2m2s
All checks were successful
Android Build & Publish / android (push) Successful in 2m2s
This commit is contained in:
66
.gitea/workflows/cleanup-packages.yml
Normal file
66
.gitea/workflows/cleanup-packages.yml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
name: Cleanup old package versions
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
keep:
|
||||||
|
description: "Number of most-recent versions to keep"
|
||||||
|
required: false
|
||||||
|
default: "5"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cleanup:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Delete old scopone-android package versions
|
||||||
|
env:
|
||||||
|
TOKEN: ${{ secrets.PACKAGE_TOKEN }}
|
||||||
|
KEEP: ${{ github.event.inputs.keep || '5' }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
BASE="https://git.sal.giize.com/api/v1/packages/mozempk"
|
||||||
|
|
||||||
|
# Fetch all generic package versions for scopone-android (paginate)
|
||||||
|
ALL_VERSIONS=()
|
||||||
|
page=1
|
||||||
|
while true; do
|
||||||
|
BATCH=$(curl -sf "$BASE?type=generic&q=scopone-android&limit=50&page=$page" \
|
||||||
|
-H "Authorization: token $TOKEN")
|
||||||
|
COUNT=$(echo "$BATCH" | python3 -c "import sys,json; data=json.load(sys.stdin); print(len(data) if isinstance(data,list) else 0)")
|
||||||
|
if [[ "$COUNT" -eq 0 ]]; then break; fi
|
||||||
|
|
||||||
|
# Collect package IDs sorted by version number (numeric desc)
|
||||||
|
IDS=$(echo "$BATCH" | python3 -c "
|
||||||
|
import sys,json
|
||||||
|
pkgs=json.load(sys.stdin)
|
||||||
|
# id, version fields
|
||||||
|
for p in pkgs:
|
||||||
|
print(p['id'], p.get('version','0'))
|
||||||
|
")
|
||||||
|
while IFS=' ' read -r pid ver; do
|
||||||
|
ALL_VERSIONS+=("$pid $ver")
|
||||||
|
done <<< "$IDS"
|
||||||
|
|
||||||
|
page=$((page + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
TOTAL=${#ALL_VERSIONS[@]}
|
||||||
|
echo "Total versions found: $TOTAL"
|
||||||
|
if [[ $TOTAL -le $KEEP ]]; then
|
||||||
|
echo "Nothing to delete (total=$TOTAL <= keep=$KEEP)."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Sort by version number numerically descending, keep first $KEEP
|
||||||
|
SORTED=$(printf '%s\n' "${ALL_VERSIONS[@]}" | sort -t' ' -k2 -Vr)
|
||||||
|
TO_DELETE=$(echo "$SORTED" | tail -n +"$((KEEP + 1))" | awk '{print $1}')
|
||||||
|
DELETE_COUNT=$(echo "$TO_DELETE" | wc -l)
|
||||||
|
echo "Deleting $DELETE_COUNT versions (keeping $KEEP most recent)…"
|
||||||
|
|
||||||
|
while IFS= read -r pid; do
|
||||||
|
HTTP=$(curl -sf -o /dev/null -w "%{http_code}" \
|
||||||
|
-X DELETE "$BASE/$pid" \
|
||||||
|
-H "Authorization: token $TOKEN")
|
||||||
|
echo " deleted package id=$pid → HTTP $HTTP"
|
||||||
|
done <<< "$TO_DELETE"
|
||||||
|
echo "Done."
|
||||||
Reference in New Issue
Block a user