diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml index 84f51ffd..1d60106e 100644 --- a/.forgejo/workflows/build.yml +++ b/.forgejo/workflows/build.yml @@ -114,3 +114,36 @@ jobs: fi echo "Uploaded ${FILENAME} (HTTP ${HTTP_CODE})" done + + - name: Prune old releases + run: | + TAG_PREFIX="${{ github.ref_name == 'main' && 'v6' || 'v6.*-beta' }}" + CURRENT_ID="${{ steps.create_release.outputs.id }}" + echo "Keeping release ${CURRENT_ID}, pruning older ${TAG_PREFIX} releases..." + PAGE=1 + while true; do + RELEASES=$(curl -s "${FORGEJO_URL}/api/v1/repos/${{ github.repository }}/releases?limit=50&page=${PAGE}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}") + COUNT=$(echo "$RELEASES" | python3 -c "import sys,json; print(len(json.load(sys.stdin)))" 2>/dev/null || echo 0) + [ "$COUNT" = "0" ] && break + echo "$RELEASES" | python3 -c " + import sys, json, fnmatch + for r in json.load(sys.stdin): + rid = r['id'] + tag = r['tag_name'] + if rid == ${CURRENT_ID}: + continue + if fnmatch.fnmatch(tag, '${TAG_PREFIX}*'): + print(f'{rid} {tag}') + " | while read -r RID RTAG; do + echo "Deleting release ${RTAG} (id=${RID})" + curl -s -o /dev/null -X DELETE \ + "${FORGEJO_URL}/api/v1/repos/${{ github.repository }}/releases/${RID}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" + curl -s -o /dev/null -X DELETE \ + "${FORGEJO_URL}/api/v1/repos/${{ github.repository }}/tags/${RTAG}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" + done + PAGE=$((PAGE + 1)) + done + echo "Prune complete"