@@ -48,13 +48,30 @@ jobs:
4848 --header "Accept: application/vnd.oci.image.index.v1+json" \
4949 --header "Authorization: Bearer ${token}" \
5050 "https://ghcr.io/v2/${image}/manifests/${tag}")
51- multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
52- digest=$(curl -s \
53- --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
54- --header "Accept: application/vnd.oci.image.manifest.v1+json" \
55- --header "Authorization: Bearer ${token}" \
56- "https://ghcr.io/v2/${image}/manifests/${multidigest}" \
57- | jq -r '.config.digest')
51+ if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
52+ # If there's a layer element it's a single-arch manifest so just get that digest
53+ digest=$(jq -r '.config.digest' <<< "${multidigest}")
54+ else
55+ # Otherwise it's multi-arch or has manifest annotations
56+ if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
57+ # Check for manifest annotations and delete if found
58+ multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
59+ fi
60+ if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
61+ # If there's still more than one digest, it's multi-arch
62+ multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
63+ else
64+ # Otherwise it's single arch
65+ multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
66+ fi
67+ if digest=$(curl -s \
68+ --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
69+ --header "Accept: application/vnd.oci.image.manifest.v1+json" \
70+ --header "Authorization: Bearer ${token}" \
71+ "https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
72+ digest=$(jq -r '.config.digest' <<< "${digest}");
73+ fi
74+ fi
5875 image_info=$(curl -sL \
5976 --header "Authorization: Bearer ${token}" \
6077 "https://ghcr.io/v2/${image}/blobs/${digest}")
0 commit comments