


































@@ -0,0 +1,146 @@
1+#!/usr/bin/env bash
2+set -euo pipefail
3+4+SCRIPT_ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5+ROOT_DIR="${OPENCLAW_LIVE_DOCKER_REPO_ROOT:-$SCRIPT_ROOT_DIR}"
6+ROOT_DIR="$(cd "$ROOT_DIR" && pwd)"
7+TRUSTED_HARNESS_DIR="${OPENCLAW_LIVE_DOCKER_TRUSTED_HARNESS_DIR:-$SCRIPT_ROOT_DIR}"
8+if [[ -z "$TRUSTED_HARNESS_DIR" || ! -d "$TRUSTED_HARNESS_DIR" ]]; then
9+echo "ERROR: trusted live Docker harness directory not found: ${TRUSTED_HARNESS_DIR:-<empty>}." >&2
10+exit 1
11+fi
12+TRUSTED_HARNESS_DIR="$(cd "$TRUSTED_HARNESS_DIR" && pwd)"
13+source "$TRUSTED_HARNESS_DIR/scripts/lib/live-docker-auth.sh"
14+15+IMAGE_NAME="${OPENCLAW_IMAGE:-openclaw:local}"
16+LIVE_IMAGE_NAME="${OPENCLAW_LIVE_IMAGE:-${IMAGE_NAME}-live}"
17+CONFIG_DIR="${OPENCLAW_CONFIG_DIR:-$HOME/.openclaw}"
18+WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-$HOME/.openclaw/workspace}"
19+PROFILE_FILE="$(openclaw_live_default_profile_file)"
20+DOCKER_USER="${OPENCLAW_DOCKER_USER:-node}"
21+DOCKER_HOME_MOUNT=()
22+DOCKER_EXTRA_ENV_FILES=()
23+DOCKER_TRUSTED_HARNESS_CONTAINER_DIR="/trusted-harness"
24+DOCKER_TRUSTED_HARNESS_MOUNT=(-v "$TRUSTED_HARNESS_DIR":"$DOCKER_TRUSTED_HARNESS_CONTAINER_DIR":ro)
25+TEMP_DIRS=()
26+27+cleanup_temp_dirs() {
28+if ((${#TEMP_DIRS[@]} > 0)); then
29+ rm -rf "${TEMP_DIRS[@]}"
30+fi
31+}
32+trap cleanup_temp_dirs EXIT
33+34+if [[ -n "${OPENCLAW_DOCKER_CACHE_HOME_DIR:-}" ]]; then
35+ CACHE_HOME_DIR="${OPENCLAW_DOCKER_CACHE_HOME_DIR}"
36+elif openclaw_live_is_ci; then
37+ CACHE_HOME_DIR="$(mktemp -d "${RUNNER_TEMP:-/tmp}/openclaw-docker-cache.XXXXXX")"
38+ TEMP_DIRS+=("$CACHE_HOME_DIR")
39+else
40+ CACHE_HOME_DIR="$HOME/.cache/openclaw/docker-cache"
41+fi
42+mkdir -p "$CACHE_HOME_DIR"
43+44+if openclaw_live_is_ci; then
45+ DOCKER_USER="$(id -u):$(id -g)"
46+ DOCKER_HOME_DIR="$(mktemp -d "${RUNNER_TEMP:-/tmp}/openclaw-docker-home.XXXXXX")"
47+ TEMP_DIRS+=("$DOCKER_HOME_DIR")
48+ DOCKER_HOME_MOUNT=(-v "$DOCKER_HOME_DIR":/home/node)
49+fi
50+51+PROFILE_MOUNT=()
52+PROFILE_STATUS="none"
53+if [[ -f "$PROFILE_FILE" && -r "$PROFILE_FILE" ]]; then
54+ PROFILE_MOUNT=(-v "$PROFILE_FILE":/home/node/.profile:ro)
55+ PROFILE_STATUS="$PROFILE_FILE"
56+fi
57+58+if [[ -n "${OPENAI_API_KEY:-}" || -n "${OPENAI_BASE_URL:-}" ]]; then
59+ docker_env_dir="$(mktemp -d "${RUNNER_TEMP:-/tmp}/openclaw-subagent-live-env.XXXXXX")"
60+ TEMP_DIRS+=("$docker_env_dir")
61+ docker_env_file="$docker_env_dir/openai.env"
62+ {
63+if [[ -n "${OPENAI_API_KEY:-}" ]]; then
64+printf 'OPENCLAW_DOCKER_LIVE_OPENAI_API_KEY=%s\n' "${OPENAI_API_KEY}"
65+fi
66+if [[ -n "${OPENAI_BASE_URL:-}" ]]; then
67+printf 'OPENCLAW_DOCKER_LIVE_OPENAI_BASE_URL=%s\n' "${OPENAI_BASE_URL}"
68+fi
69+ } >"$docker_env_file"
70+ DOCKER_EXTRA_ENV_FILES+=(--env-file "$docker_env_file")
71+fi
72+73+CONTAINER_NODE_OPTIONS="${OPENCLAW_DOCKER_NODE_OPTIONS:-${NODE_OPTIONS:-}}"
74+if [[ -z "$(openclaw_live_trim "$CONTAINER_NODE_OPTIONS")" ]]; then
75+ CONTAINER_NODE_OPTIONS="--max-old-space-size=4096"
76+fi
77+CONTAINER_NODE_OPTIONS="$CONTAINER_NODE_OPTIONS --disable-warning=ExperimentalWarning"
78+79+read -r -d '' LIVE_TEST_CMD <<'EOF' || true
80+set -euo pipefail
81+[ -f "$HOME/.profile" ] && [ -r "$HOME/.profile" ] && source "$HOME/.profile" || true
82+if [ -n "${OPENCLAW_DOCKER_LIVE_OPENAI_API_KEY:-}" ]; then
83+ export OPENAI_API_KEY="$OPENCLAW_DOCKER_LIVE_OPENAI_API_KEY"
84+ unset OPENCLAW_DOCKER_LIVE_OPENAI_API_KEY
85+fi
86+if [ -n "${OPENCLAW_DOCKER_LIVE_OPENAI_BASE_URL:-}" ]; then
87+ export OPENAI_BASE_URL="$OPENCLAW_DOCKER_LIVE_OPENAI_BASE_URL"
88+ unset OPENCLAW_DOCKER_LIVE_OPENAI_BASE_URL
89+fi
90+export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
91+export COREPACK_HOME="${COREPACK_HOME:-$XDG_CACHE_HOME/node/corepack}"
92+export NPM_CONFIG_CACHE="${NPM_CONFIG_CACHE:-$XDG_CACHE_HOME/npm}"
93+export npm_config_cache="$NPM_CONFIG_CACHE"
94+mkdir -p "$XDG_CACHE_HOME" "$COREPACK_HOME" "$NPM_CONFIG_CACHE"
95+chmod 700 "$XDG_CACHE_HOME" "$COREPACK_HOME" "$NPM_CONFIG_CACHE" || true
96+tmp_dir="$(mktemp -d)"
97+trusted_scripts_dir="${OPENCLAW_LIVE_DOCKER_SCRIPTS_DIR:-/src/scripts}"
98+source "$trusted_scripts_dir/lib/live-docker-stage.sh"
99+openclaw_live_stage_source_tree "$tmp_dir"
100+openclaw_live_stage_node_modules "$tmp_dir"
101+openclaw_live_link_runtime_tree "$tmp_dir"
102+openclaw_live_stage_state_dir "$tmp_dir/.openclaw-state"
103+openclaw_live_prepare_staged_config
104+cd "$tmp_dir"
105+OPENCLAW_LIVE_TEST=1 \
106+OPENCLAW_LIVE_SUBAGENT_E2E=1 \
107+OPENCLAW_VITEST_MAX_WORKERS="${OPENCLAW_VITEST_MAX_WORKERS:-1}" \
108+node scripts/test-live.mjs -- src/agents/subagent-announce.live.test.ts -- --reporter=verbose
109+EOF
110+111+OPENCLAW_LIVE_DOCKER_REPO_ROOT="$ROOT_DIR" "$TRUSTED_HARNESS_DIR/scripts/test-live-build-docker.sh"
112+113+echo "==> Run subagent announce live test in Docker"
114+echo "==> Target: src/agents/subagent-announce.live.test.ts"
115+echo "==> Model: ${OPENCLAW_LIVE_SUBAGENT_E2E_MODEL:-openai/gpt-5.5}"
116+echo "==> Profile file: $PROFILE_STATUS"
117+DOCKER_RUN_ARGS=(docker run --rm -t \
118+ -u "$DOCKER_USER" \
119+ --entrypoint bash \
120+ -e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
121+ -e HOME=/home/node \
122+ -e NODE_OPTIONS="$CONTAINER_NODE_OPTIONS" \
123+ -e OPENCLAW_SKIP_CHANNELS=1 \
124+ -e OPENCLAW_SUPPRESS_NOTES=1 \
125+ -e OPENCLAW_LIVE_DOCKER_SCRIPTS_DIR="${DOCKER_TRUSTED_HARNESS_CONTAINER_DIR}/scripts" \
126+ -e OPENCLAW_LIVE_DOCKER_SOURCE_STAGE_MODE="${OPENCLAW_LIVE_DOCKER_SOURCE_STAGE_MODE:-copy}" \
127+ -e OPENCLAW_LIVE_TEST=1 \
128+ -e OPENCLAW_LIVE_TEST_QUIET="${OPENCLAW_LIVE_TEST_QUIET:-}" \
129+ -e OPENCLAW_LIVE_WRAPPER_HEARTBEAT_MS="${OPENCLAW_LIVE_WRAPPER_HEARTBEAT_MS:-}" \
130+ -e OPENCLAW_LIVE_SUBAGENT_E2E=1 \
131+ -e OPENCLAW_LIVE_SUBAGENT_E2E_MODEL="${OPENCLAW_LIVE_SUBAGENT_E2E_MODEL:-}" \
132+ -e OPENCLAW_VITEST_FS_MODULE_CACHE=0 \
133+ -e OPENCLAW_VITEST_MAX_WORKERS="${OPENCLAW_VITEST_MAX_WORKERS:-1}")
134+openclaw_live_append_array DOCKER_RUN_ARGS DOCKER_EXTRA_ENV_FILES
135+openclaw_live_append_array DOCKER_RUN_ARGS DOCKER_HOME_MOUNT
136+openclaw_live_append_array DOCKER_RUN_ARGS DOCKER_TRUSTED_HARNESS_MOUNT
137+DOCKER_RUN_ARGS+=(\
138+ -v "$CACHE_HOME_DIR":/home/node/.cache \
139+ -v "$ROOT_DIR":/src:ro \
140+ -v "$CONFIG_DIR":/home/node/.openclaw \
141+ -v "$WORKSPACE_DIR":/home/node/.openclaw/workspace)
142+openclaw_live_append_array DOCKER_RUN_ARGS PROFILE_MOUNT
143+DOCKER_RUN_ARGS+=(\
144+"$LIVE_IMAGE_NAME" \
145+ -lc "$LIVE_TEST_CMD")
146+"${DOCKER_RUN_ARGS[@]}"
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。