From f1dbdafb0cb1f07f842511704fda1b9ab754624e Mon Sep 17 00:00:00 2001 From: Donavan Fritz Date: Thu, 25 Jun 2026 21:21:23 -0500 Subject: [PATCH] fix(prune): paginate package list so old tags past page 1 are actually pruned The org now has more container versions than one API page returns; the unpaginated list dropped a package's older numeric tags, so KEEP-based pruning silently left them (base/runner crept to 5). Loop pages at the max page size instead. Co-Authored-By: Claude Opus 4.8 (1M context) --- action.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/action.yaml b/action.yaml index 992688f..5f2e5ad 100644 --- a/action.yaml +++ b/action.yaml @@ -65,9 +65,19 @@ runs: set -euo pipefail tea login add --name ci --url https://code.fritzlab.net \ --token "$TOKEN" --no-version-check >/dev/null 2>&1 || true - tea api "/packages/${ORG}?type=container" \ - | jq -r --arg n "$NAME" \ - '.[] | select(.name==$n) | select(.version | test("^[0-9]+$")) | .version' \ + # Paginate the package list. The org has more container versions than a + # single API page returns (Gitea caps page size at MAX_RESPONSE_ITEMS), + # so an unpaginated call silently drops a package's older tags from the + # list and they never get pruned — that's how tags crept past KEEP. + page=1 + while :; do + resp=$(tea api "/packages/${ORG}?type=container&limit=50&page=${page}") + [ "$(jq 'length' <<<"$resp")" -eq 0 ] && break + jq -r --arg n "$NAME" \ + '.[] | select(.name==$n) | select(.version | test("^[0-9]+$")) | .version' \ + <<<"$resp" + page=$((page + 1)) + done \ | sort -n | head -n -"$KEEP" \ | while read -r tag; do echo "deleting ${NAME}:$tag"