CI: retry docker builds on transient registry/network failures.
CI / test (push) Successful in 9m46s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-10 13:15:57 +03:00
parent 9b48b165ba
commit 78a9f3043e
3 changed files with 56 additions and 21 deletions
+20 -16
View File
@@ -26,24 +26,28 @@ jobs:
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- name: Build eventhub image - name: Build eventhub image
uses: docker/build-push-action@v5 run: |
with: set -euo pipefail
context: . bash scripts/retry-docker-build.sh 3 30 -- \
file: docker/Dockerfile docker buildx build \
load: true --file docker/Dockerfile \
tags: eventhub:latest --tag eventhub:latest \
provenance: false --load \
sbom: false --provenance=false \
--sbom=false \
.
- name: Build API test image - name: Build API test image
uses: docker/build-push-action@v5 run: |
with: set -euo pipefail
context: . bash scripts/retry-docker-build.sh 3 30 -- \
file: docker/ApiTests.Dockerfile docker buildx build \
load: true --file docker/ApiTests.Dockerfile \
tags: eventhub-api-tests:latest --tag eventhub-api-tests:latest \
provenance: false --load \
sbom: false --provenance=false \
--sbom=false \
.
- name: Run API tests (local CT) - name: Run API tests (local CT)
run: docker run --rm eventhub-api-tests:latest run: docker run --rm eventhub-api-tests:latest
+6 -5
View File
@@ -20,11 +20,12 @@ publish_image() {
if echo "${FILES}" | grep -qE "${path_pattern}"; then if echo "${FILES}" | grep -qE "${path_pattern}"; then
echo "== ${name}: rebuild (matched: ${path_pattern})" echo "== ${name}: rebuild (matched: ${path_pattern})"
docker buildx build -f "${dockerfile}" --push \ bash scripts/retry-docker-build.sh 3 30 -- \
-t "${REGISTRY}/${name}:${TAG}" \ docker buildx build -f "${dockerfile}" --push \
-t "${REGISTRY}/${name}:ift" \ -t "${REGISTRY}/${name}:${TAG}" \
--provenance=false --sbom=false \ -t "${REGISTRY}/${name}:ift" \
"${context}" --provenance=false --sbom=false \
"${context}"
return return
fi fi
+30
View File
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
# Retry docker/buildx commands on transient network/registry failures.
# Usage: retry-docker-build.sh [max_attempts] [wait_seconds] -- <command...>
set -euo pipefail
MAX="${1:-3}"
WAIT="${2:-30}"
shift 2
[[ "${1:-}" == "--" ]] && shift
if [[ $# -eq 0 ]]; then
echo "Usage: $0 [max_attempts] [wait_seconds] -- <command...>" >&2
exit 2
fi
attempt=1
while true; do
echo "== docker build attempt ${attempt}/${MAX}: $*"
if "$@"; then
exit 0
fi
code=$?
if (( attempt >= MAX )); then
echo "== all ${MAX} attempts failed (last exit ${code})"
exit "${code}"
fi
echo "== attempt ${attempt} failed (exit ${code}), retry in ${WAIT}s..."
sleep "${WAIT}"
attempt=$((attempt + 1))
done