#!/usr/bin/env bash # Retry docker/buildx commands on transient network/registry failures. # Usage: retry-docker-build.sh [max_attempts] [wait_seconds] -- set -euo pipefail MAX="${1:-3}" WAIT="${2:-30}" shift 2 [[ "${1:-}" == "--" ]] && shift if [[ $# -eq 0 ]]; then echo "Usage: $0 [max_attempts] [wait_seconds] -- " >&2 exit 2 fi attempt=1 while true; do echo "== docker build attempt ${attempt}/${MAX}: $*" set +e "$@" code=$? set -e if (( code == 0 )); then exit 0 fi 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..." docker buildx prune -f >/dev/null 2>&1 || true sleep "${WAIT}" attempt=$((attempt + 1)) done