@@ -6,10 +6,21 @@ ROOT_DIR="${OPENCLAW_LIVE_DOCKER_REPO_ROOT:-$SCRIPT_ROOT_DIR}"
|
6 | 6 | ROOT_DIR="$(cd "$ROOT_DIR" && pwd)" |
7 | 7 | source "$SCRIPT_ROOT_DIR/scripts/lib/docker-build.sh" |
8 | 8 | source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh" |
9 | | -DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-600s}}" |
| 9 | +DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-180s}}" |
10 | 10 | IMAGE_NAME="${OPENCLAW_IMAGE:-openclaw:local}" |
11 | 11 | LIVE_IMAGE_NAME="${OPENCLAW_LIVE_IMAGE:-${IMAGE_NAME}-live}" |
12 | 12 | DOCKER_BUILD_EXTENSIONS="${OPENCLAW_DOCKER_BUILD_EXTENSIONS:-${OPENCLAW_EXTENSIONS:-}}" |
| 13 | +LIVE_IMAGE_PULL_ATTEMPTS="${OPENCLAW_LIVE_DOCKER_PULL_ATTEMPTS:-3}" |
| 14 | +LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS="${OPENCLAW_LIVE_DOCKER_PULL_RETRY_DELAY_SECONDS:-5}" |
| 15 | + |
| 16 | +if ! [[ "$LIVE_IMAGE_PULL_ATTEMPTS" =~ ^[1-9][0-9]*$ ]]; then |
| 17 | +echo "OPENCLAW_LIVE_DOCKER_PULL_ATTEMPTS must be a positive integer, got: $LIVE_IMAGE_PULL_ATTEMPTS" >&2 |
| 18 | +exit 2 |
| 19 | +fi |
| 20 | +if ! [[ "$LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" =~ ^[0-9]+$ ]]; then |
| 21 | +echo "OPENCLAW_LIVE_DOCKER_PULL_RETRY_DELAY_SECONDS must be a non-negative integer, got: $LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" >&2 |
| 22 | +exit 2 |
| 23 | +fi |
13 | 24 | |
14 | 25 | case " ${DOCKER_BUILD_EXTENSIONS} " in |
15 | 26 | *" matrix "*) |
@@ -24,13 +35,27 @@ if [[ -n "${DOCKER_BUILD_EXTENSIONS}" ]]; then
|
24 | 35 | DOCKER_BUILD_ARGS+=(--build-arg "OPENCLAW_EXTENSIONS=${DOCKER_BUILD_EXTENSIONS}") |
25 | 36 | fi |
26 | 37 | |
| 38 | +pull_live_image() { |
| 39 | +local attempt |
| 40 | +for attempt in $(seq 1 "$LIVE_IMAGE_PULL_ATTEMPTS"); do |
| 41 | +echo "==> Pull live-test image attempt ${attempt}/${LIVE_IMAGE_PULL_ATTEMPTS}: $LIVE_IMAGE_NAME" |
| 42 | +if docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"; then |
| 43 | +return 0 |
| 44 | +fi |
| 45 | +if [[ "$attempt" -lt "$LIVE_IMAGE_PULL_ATTEMPTS" && "$LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" -gt 0 ]]; then |
| 46 | + sleep "$LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" |
| 47 | +fi |
| 48 | +done |
| 49 | +return 1 |
| 50 | +} |
| 51 | + |
27 | 52 | if [[ "${OPENCLAW_SKIP_DOCKER_BUILD:-}" == "1" ]]; then |
28 | 53 | echo "==> Reuse live-test image: $LIVE_IMAGE_NAME" |
29 | 54 | if docker_e2e_docker_cmd image inspect "$LIVE_IMAGE_NAME" >/dev/null 2>&1; then |
30 | 55 | exit 0 |
31 | 56 | fi |
32 | 57 | echo "==> Live-test image not found locally; pulling: $LIVE_IMAGE_NAME" |
33 | | -if docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"; then |
| 58 | +if pull_live_image; then |
34 | 59 | exit 0 |
35 | 60 | fi |
36 | 61 | if ! docker_build_on_missing_enabled; then |
|