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."