diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 4e58494..3760536 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -138,7 +138,16 @@ jobs: - name: Get multi-arch digest id: get_digest run: | - digest=$(docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} --format '{{.Digest}}') + # 直接从 docker pull 获取 digest,这是最可靠的方法 + digest=$(docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} 2>&1 | grep "Digest:" | cut -d' ' -f2 || echo "") + if [ -z "$digest" ]; then + # 备选方案:使用 crane 风格的检查(如果支持的话) + digest=$(docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} | grep "Digest:" | head -1 | cut -d' ' -f2 || echo "") + fi + if [ -z "$digest" ]; then + # 最后备选:从 raw manifest 计算 + digest=$(docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} --raw | sha256sum | awk '{print "sha256:"$1}') + fi echo "digest=$digest" >> $GITHUB_OUTPUT - name: Inspect image run: |