mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 05:51:15 +08:00
fix(ci): retry live Docker image pulls
This commit is contained in:
@@ -6,10 +6,21 @@ ROOT_DIR="${OPENCLAW_LIVE_DOCKER_REPO_ROOT:-$SCRIPT_ROOT_DIR}"
|
|||||||
ROOT_DIR="$(cd "$ROOT_DIR" && pwd)"
|
ROOT_DIR="$(cd "$ROOT_DIR" && pwd)"
|
||||||
source "$SCRIPT_ROOT_DIR/scripts/lib/docker-build.sh"
|
source "$SCRIPT_ROOT_DIR/scripts/lib/docker-build.sh"
|
||||||
source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh"
|
source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh"
|
||||||
DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-600s}}"
|
DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-180s}}"
|
||||||
IMAGE_NAME="${OPENCLAW_IMAGE:-openclaw:local}"
|
IMAGE_NAME="${OPENCLAW_IMAGE:-openclaw:local}"
|
||||||
LIVE_IMAGE_NAME="${OPENCLAW_LIVE_IMAGE:-${IMAGE_NAME}-live}"
|
LIVE_IMAGE_NAME="${OPENCLAW_LIVE_IMAGE:-${IMAGE_NAME}-live}"
|
||||||
DOCKER_BUILD_EXTENSIONS="${OPENCLAW_DOCKER_BUILD_EXTENSIONS:-${OPENCLAW_EXTENSIONS:-}}"
|
DOCKER_BUILD_EXTENSIONS="${OPENCLAW_DOCKER_BUILD_EXTENSIONS:-${OPENCLAW_EXTENSIONS:-}}"
|
||||||
|
LIVE_IMAGE_PULL_ATTEMPTS="${OPENCLAW_LIVE_DOCKER_PULL_ATTEMPTS:-3}"
|
||||||
|
LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS="${OPENCLAW_LIVE_DOCKER_PULL_RETRY_DELAY_SECONDS:-5}"
|
||||||
|
|
||||||
|
if ! [[ "$LIVE_IMAGE_PULL_ATTEMPTS" =~ ^[1-9][0-9]*$ ]]; then
|
||||||
|
echo "OPENCLAW_LIVE_DOCKER_PULL_ATTEMPTS must be a positive integer, got: $LIVE_IMAGE_PULL_ATTEMPTS" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
if ! [[ "$LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" =~ ^[0-9]+$ ]]; then
|
||||||
|
echo "OPENCLAW_LIVE_DOCKER_PULL_RETRY_DELAY_SECONDS must be a non-negative integer, got: $LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
case " ${DOCKER_BUILD_EXTENSIONS} " in
|
case " ${DOCKER_BUILD_EXTENSIONS} " in
|
||||||
*" matrix "*)
|
*" matrix "*)
|
||||||
@@ -24,13 +35,27 @@ if [[ -n "${DOCKER_BUILD_EXTENSIONS}" ]]; then
|
|||||||
DOCKER_BUILD_ARGS+=(--build-arg "OPENCLAW_EXTENSIONS=${DOCKER_BUILD_EXTENSIONS}")
|
DOCKER_BUILD_ARGS+=(--build-arg "OPENCLAW_EXTENSIONS=${DOCKER_BUILD_EXTENSIONS}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
pull_live_image() {
|
||||||
|
local attempt
|
||||||
|
for attempt in $(seq 1 "$LIVE_IMAGE_PULL_ATTEMPTS"); do
|
||||||
|
echo "==> Pull live-test image attempt ${attempt}/${LIVE_IMAGE_PULL_ATTEMPTS}: $LIVE_IMAGE_NAME"
|
||||||
|
if docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [[ "$attempt" -lt "$LIVE_IMAGE_PULL_ATTEMPTS" && "$LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS" -gt 0 ]]; then
|
||||||
|
sleep "$LIVE_IMAGE_PULL_RETRY_DELAY_SECONDS"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
if [[ "${OPENCLAW_SKIP_DOCKER_BUILD:-}" == "1" ]]; then
|
if [[ "${OPENCLAW_SKIP_DOCKER_BUILD:-}" == "1" ]]; then
|
||||||
echo "==> Reuse live-test image: $LIVE_IMAGE_NAME"
|
echo "==> Reuse live-test image: $LIVE_IMAGE_NAME"
|
||||||
if docker_e2e_docker_cmd image inspect "$LIVE_IMAGE_NAME" >/dev/null 2>&1; then
|
if docker_e2e_docker_cmd image inspect "$LIVE_IMAGE_NAME" >/dev/null 2>&1; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
echo "==> Live-test image not found locally; pulling: $LIVE_IMAGE_NAME"
|
echo "==> Live-test image not found locally; pulling: $LIVE_IMAGE_NAME"
|
||||||
if docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"; then
|
if pull_live_image; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
if ! docker_build_on_missing_enabled; then
|
if ! docker_build_on_missing_enabled; then
|
||||||
|
|||||||
@@ -166,7 +166,10 @@ describe("docker build helper", () => {
|
|||||||
expect(e2eImageHelper).toContain('docker_e2e_docker_cmd pull "$image_name"');
|
expect(e2eImageHelper).toContain('docker_e2e_docker_cmd pull "$image_name"');
|
||||||
expect(liveBuild).toContain('source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh"');
|
expect(liveBuild).toContain('source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh"');
|
||||||
expect(liveBuild).toContain(
|
expect(liveBuild).toContain(
|
||||||
'DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-600s}}"',
|
'DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-180s}}"',
|
||||||
|
);
|
||||||
|
expect(liveBuild).toContain(
|
||||||
|
'LIVE_IMAGE_PULL_ATTEMPTS="${OPENCLAW_LIVE_DOCKER_PULL_ATTEMPTS:-3}"',
|
||||||
);
|
);
|
||||||
expect(liveBuild).toContain('docker_e2e_docker_cmd image inspect "$LIVE_IMAGE_NAME"');
|
expect(liveBuild).toContain('docker_e2e_docker_cmd image inspect "$LIVE_IMAGE_NAME"');
|
||||||
expect(liveBuild).toContain('docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"');
|
expect(liveBuild).toContain('docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"');
|
||||||
|
|||||||
@@ -885,8 +885,9 @@ describe("package artifact reuse", () => {
|
|||||||
expect(build).toContain('source "$SCRIPT_ROOT_DIR/scripts/lib/docker-build.sh"');
|
expect(build).toContain('source "$SCRIPT_ROOT_DIR/scripts/lib/docker-build.sh"');
|
||||||
expect(build).toContain('source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh"');
|
expect(build).toContain('source "$SCRIPT_ROOT_DIR/scripts/lib/docker-e2e-container.sh"');
|
||||||
expect(build).toContain(
|
expect(build).toContain(
|
||||||
'DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-600s}}"',
|
'DOCKER_COMMAND_TIMEOUT="${DOCKER_COMMAND_TIMEOUT:-${OPENCLAW_LIVE_DOCKER_PULL_TIMEOUT:-180s}}"',
|
||||||
);
|
);
|
||||||
|
expect(build).toContain('LIVE_IMAGE_PULL_ATTEMPTS="${OPENCLAW_LIVE_DOCKER_PULL_ATTEMPTS:-3}"');
|
||||||
expect(build).toContain('docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"');
|
expect(build).toContain('docker_e2e_docker_cmd pull "$LIVE_IMAGE_NAME"');
|
||||||
expect(build).not.toContain('docker pull "$LIVE_IMAGE_NAME"');
|
expect(build).not.toContain('docker pull "$LIVE_IMAGE_NAME"');
|
||||||
expect(stage).toContain(
|
expect(stage).toContain(
|
||||||
|
|||||||
Reference in New Issue
Block a user