mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-28 04:28:58 +02:00
84 lines
2.7 KiB
Bash
84 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# Shared Docker E2E image resolver/builder.
|
|
# Suite-specific scripts call this to resolve overrides, reuse pulled images, or
|
|
# build the runner/functional images with the prepared OpenClaw package tarball.
|
|
|
|
DOCKER_E2E_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="${ROOT_DIR:-$(cd "$DOCKER_E2E_LIB_DIR/../.." && pwd)}"
|
|
|
|
source "$DOCKER_E2E_LIB_DIR/docker-e2e-logs.sh"
|
|
source "$DOCKER_E2E_LIB_DIR/docker-build.sh"
|
|
source "$DOCKER_E2E_LIB_DIR/docker-e2e-package.sh"
|
|
|
|
docker_e2e_resolve_image() {
|
|
local default_image="$1"
|
|
shift
|
|
|
|
local env_name
|
|
for env_name in "$@"; do
|
|
local value="${!env_name:-}"
|
|
if [ -n "$value" ]; then
|
|
printf '%s\n' "$value"
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
if [ -n "${OPENCLAW_DOCKER_E2E_IMAGE:-}" ]; then
|
|
printf '%s\n' "$OPENCLAW_DOCKER_E2E_IMAGE"
|
|
return 0
|
|
fi
|
|
|
|
printf '%s\n' "$default_image"
|
|
}
|
|
|
|
docker_e2e_build_or_reuse() {
|
|
local image_name="$1"
|
|
local label="$2"
|
|
local dockerfile="${3:-$ROOT_DIR/scripts/e2e/Dockerfile}"
|
|
local context="${4:-$ROOT_DIR}"
|
|
local target="${5:-}"
|
|
local skip_build="${6:-0}"
|
|
if [ -z "$target" ] && [ "$dockerfile" = "$ROOT_DIR/scripts/e2e/Dockerfile" ]; then
|
|
# The generic E2E image defaults to the package-installed app image; tests
|
|
# that need a clean install runner pass target=bare explicitly.
|
|
target="functional"
|
|
fi
|
|
|
|
if [ "${OPENCLAW_SKIP_DOCKER_BUILD:-0}" = "1" ] || [ "$skip_build" = "1" ]; then
|
|
echo "Reusing Docker image: $image_name"
|
|
if ! docker image inspect "$image_name" >/dev/null 2>&1; then
|
|
echo "Docker image not found locally; pulling: $image_name"
|
|
if docker pull "$image_name"; then
|
|
return 0
|
|
fi
|
|
if docker_build_on_missing_enabled; then
|
|
echo "Docker image not available; building because OPENCLAW_DOCKER_BUILD_ON_MISSING/OPENCLAW_TESTBOX allows fallback."
|
|
else
|
|
echo "Docker image not found: $image_name" >&2
|
|
echo "Build it first or unset OPENCLAW_SKIP_DOCKER_BUILD." >&2
|
|
return 1
|
|
fi
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "Building Docker image: $image_name"
|
|
local build_args=()
|
|
if [ -n "$target" ]; then
|
|
build_args+=(--target "$target")
|
|
fi
|
|
if [ "$target" = "functional" ]; then
|
|
local package_tgz
|
|
local package_context
|
|
package_tgz="$(docker_e2e_prepare_package_tgz "$label")"
|
|
package_context="$(docker_e2e_prepare_package_context "$package_tgz")"
|
|
# The Dockerfile never sees repo sources as app input; functional installs
|
|
# exactly this tarball through a named BuildKit context.
|
|
build_args+=(--build-context "openclaw_package=$package_context")
|
|
fi
|
|
build_args+=(-t "$image_name" -f "$dockerfile" "$context")
|
|
docker_build_run "$label-build" "${build_args[@]}"
|
|
}
|