Skip to content

Commit c56b2ab

Browse files
committed
fix: add retry logic for signing images in GHCR and Docker Hub to handle transient errors
1 parent 0a8c856 commit c56b2ab

2 files changed

Lines changed: 52 additions & 8 deletions

File tree

.github/workflows/docker-build.yml

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -731,20 +731,42 @@ jobs:
731731
uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2
732732

733733
# Sign GHCR image with keyless signing (Sigstore/Fulcio)
734+
# Retry up to 3 times to handle transient Fulcio/Rekor INTERNAL_ERROR (HTTP/2 stream errors)
734735
- name: Sign GHCR Image
735736
if: env.TRIGGER_EVENT != 'pull_request' && steps.skip.outputs.skip_build != 'true' && steps.skip.outputs.is_feature_push != 'true'
736737
run: |
737738
echo "Signing GHCR image with keyless signing..."
738-
cosign sign --yes ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}
739-
echo "✅ GHCR image signed successfully"
739+
for attempt in 1 2 3; do
740+
if cosign sign --yes ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}; then
741+
echo "✅ GHCR image signed successfully"
742+
break
743+
fi
744+
if [ "$attempt" -eq 3 ]; then
745+
echo "❌ GHCR signing failed after 3 attempts"
746+
exit 1
747+
fi
748+
echo "⚠️ Attempt $attempt failed — retrying in 15s..."
749+
sleep 15
750+
done
740751
741752
# Sign Docker Hub image with keyless signing (Sigstore/Fulcio)
753+
# Retry up to 3 times to handle transient Fulcio/Rekor INTERNAL_ERROR (HTTP/2 stream errors)
742754
- name: Sign Docker Hub Image
743755
if: env.TRIGGER_EVENT != 'pull_request' && steps.skip.outputs.skip_build != 'true' && steps.skip.outputs.is_feature_push != 'true' && env.HAS_DOCKERHUB_TOKEN == 'true'
744756
run: |
745757
echo "Signing Docker Hub image with keyless signing..."
746-
cosign sign --yes ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}
747-
echo "✅ Docker Hub image signed successfully"
758+
for attempt in 1 2 3; do
759+
if cosign sign --yes ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}; then
760+
echo "✅ Docker Hub image signed successfully"
761+
break
762+
fi
763+
if [ "$attempt" -eq 3 ]; then
764+
echo "❌ Docker Hub signing failed after 3 attempts"
765+
exit 1
766+
fi
767+
echo "⚠️ Attempt $attempt failed — retrying in 15s..."
768+
sleep 15
769+
done
748770
749771
# Attach SBOM to Docker Hub image
750772
- name: Attach SBOM to Docker Hub

.github/workflows/nightly-build.yml

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -340,19 +340,41 @@ jobs:
340340
uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2
341341

342342
# Sign GHCR image with keyless signing (Sigstore/Fulcio)
343+
# Retry up to 3 times to handle transient Fulcio/Rekor INTERNAL_ERROR (HTTP/2 stream errors)
343344
- name: Sign GHCR Image
344345
run: |
345346
echo "Signing GHCR nightly image with keyless signing..."
346-
cosign sign --yes "${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.resolve_digest.outputs.digest }}"
347-
echo "✅ GHCR nightly image signed successfully"
347+
for attempt in 1 2 3; do
348+
if cosign sign --yes "${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.resolve_digest.outputs.digest }}"; then
349+
echo "✅ GHCR nightly image signed successfully"
350+
break
351+
fi
352+
if [ "$attempt" -eq 3 ]; then
353+
echo "❌ GHCR signing failed after 3 attempts"
354+
exit 1
355+
fi
356+
echo "⚠️ Attempt $attempt failed — retrying in 15s..."
357+
sleep 15
358+
done
348359
349360
# Sign Docker Hub image with keyless signing (Sigstore/Fulcio)
361+
# Retry up to 3 times to handle transient Fulcio/Rekor INTERNAL_ERROR (HTTP/2 stream errors)
350362
- name: Sign Docker Hub Image
351363
if: env.HAS_DOCKERHUB_TOKEN == 'true'
352364
run: |
353365
echo "Signing Docker Hub nightly image with keyless signing..."
354-
cosign sign --yes "${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.resolve_digest.outputs.digest }}"
355-
echo "✅ Docker Hub nightly image signed successfully"
366+
for attempt in 1 2 3; do
367+
if cosign sign --yes "${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.resolve_digest.outputs.digest }}"; then
368+
echo "✅ Docker Hub nightly image signed successfully"
369+
break
370+
fi
371+
if [ "$attempt" -eq 3 ]; then
372+
echo "❌ Docker Hub signing failed after 3 attempts"
373+
exit 1
374+
fi
375+
echo "⚠️ Attempt $attempt failed — retrying in 15s..."
376+
sleep 15
377+
done
356378
357379
# Attach SBOM to Docker Hub image
358380
- name: Attach SBOM to Docker Hub

0 commit comments

Comments
 (0)