diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 3315d4d..8e4b980 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -52,11 +52,36 @@ jobs: - name: Delete untagged images from GHCR if: github.event_name == 'push' && github.ref == 'refs/heads/main' - uses: actions/delete-package-versions@v4 - with: - package-name: 'net-utils' - package-type: 'container' - min-versions-to-keep: 5 - delete-only-untagged-versions: 'true' env: - TOKEN: ${{ secrets.GH_PAT }} + GH_TOKEN: ${{ secrets.GH_PAT }} + PACKAGE_NAME: net-utils + OWNER: ${{ github.repository_owner }} + run: | + set -euo pipefail + + function check_package() { + local path="$1" + if gh api -H "Accept: application/vnd.github+json" "$path" >/dev/null 2>&1; then + echo "$path" + return 0 + fi + return 1 + } + + PACKAGE_API="" + if PACKAGE_API=$(check_package "/orgs/${OWNER}/packages/container/${PACKAGE_NAME}" 2>/dev/null); then + : + elif PACKAGE_API=$(check_package "/users/${OWNER}/packages/container/${PACKAGE_NAME}" 2>/dev/null); then + : + else + echo "Package not found in org or user scope, skipping cleanup." + exit 0 + fi + + echo "Cleaning untagged versions for package: ${PACKAGE_API}" + gh api -H "Accept: application/vnd.github+json" "${PACKAGE_API}/versions?per_page=100" --paginate --jq '.[] | select(.metadata.container.tags | length == 0) | .id' | while read -r version_id; do + if [[ -n "$version_id" ]]; then + echo "Deleting untagged version ${version_id}" + gh api -X DELETE -H "Accept: application/vnd.github+json" "${PACKAGE_API}/versions/${version_id}" + fi + done