ci: fix prune-registry registry ref case and protect signatures
Build containers / fedora-cosmic (rawhide) (push) Failing after 45s
Build containers / fedora-cosmic (44) (push) Successful in 11m0s
Build containers / Prune old releases (push) Successful in 29s

The registry path is lowercase, so the capitalized owner made skopeo inspect
fail and every cosign .sig tag was deleted. Lowercase the owner and, if no
digest resolves, keep all signature tags instead of deleting them.
This commit is contained in:
2026-09-27 20:28:40 +02:00
parent edfa563fd7
commit e4251f4d78
+15 -3
View File
@@ -18,7 +18,8 @@ REGISTRY_HOST="${REGISTRY_HOST:-$(printf '%s' "${GITEA_URL}" | sed -E 's#https?:
TOKEN="${REGISTRY_TOKEN:?REGISTRY_TOKEN (write:package) is required}"
AUTHFILE="${AUTHFILE:-${HOME}/.docker/config.json}"
API="${GITEA_URL%/}/api/v1/packages/${OWNER}/container/${IMAGE}"
IMAGE_REF="${REGISTRY_HOST}/${OWNER}/${IMAGE}"
# Registry paths are lowercase (the Gitea API owner is not).
IMAGE_REF="${REGISTRY_HOST}/$(printf '%s' "${OWNER}" | tr '[:upper:]' '[:lower:]')/${IMAGE}"
# Collect all versions (paginated).
versions=""
@@ -41,13 +42,24 @@ for d in "${DISTROS[@]}"; do
[[ -n "${newest}" ]] && keep["${newest}"]=1
done
# Keep the cosign signature of each kept image tag.
# Keep the cosign signature of each kept image tag. If no digest could be
# resolved, keep every signature tag rather than risk deleting a needed one.
resolved=0
for tag in "${!keep[@]}"; do
[[ "${tag}" == sha256-* ]] && continue
digest="$(skopeo inspect --authfile "${AUTHFILE}" --format '{{.Digest}}' \
"docker://${IMAGE_REF}:${tag}" 2>/dev/null || true)"
[[ -n "${digest}" ]] && keep["sha256-${digest#sha256:}.sig"]=1
if [[ -n "${digest}" ]]; then
keep["sha256-${digest#sha256:}.sig"]=1
resolved=1
fi
done
if [[ "${resolved}" -eq 0 ]]; then
echo "WARNING: could not resolve any image digest; keeping all signature tags"
while IFS= read -r v; do
[[ "${v}" == sha256-* ]] && keep["${v}"]=1
done <<< "${versions}"
fi
# Delete everything else.
while IFS= read -r v; do