mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 18:20:44 +00:00
test: annotate Docker test-state scenarios
This commit is contained in:
@@ -7,6 +7,13 @@ source "$ROOT_DIR/scripts/lib/docker-e2e-image.sh"
|
||||
IMAGE_NAME="$(docker_e2e_resolve_image "openclaw-agents-delete-shared-workspace-e2e:local" OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE)"
|
||||
SKIP_BUILD="${OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD:-0}"
|
||||
DOCKER_COMMAND_TIMEOUT="${OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_DOCKER_COMMAND_TIMEOUT:-300s}"
|
||||
OPENCLAW_TEST_STATE_SCRIPT_B64="$(
|
||||
node "$ROOT_DIR/scripts/lib/openclaw-test-state.mjs" shell \
|
||||
--label agents-delete-shared-workspace \
|
||||
--scenario empty \
|
||||
| base64 \
|
||||
| tr -d '\n'
|
||||
)"
|
||||
|
||||
docker_cmd() {
|
||||
if command -v timeout >/dev/null 2>&1; then
|
||||
@@ -28,6 +35,7 @@ run_logged agents-delete-shared-workspace docker_cmd docker run --rm \
|
||||
-e OPENCLAW_SKIP_BROWSER_CONTROL_SERVER=1 \
|
||||
-e OPENCLAW_SKIP_ACPX_RUNTIME=1 \
|
||||
-e OPENCLAW_SKIP_ACPX_RUNTIME_PROBE=1 \
|
||||
-e "OPENCLAW_TEST_STATE_SCRIPT_B64=$OPENCLAW_TEST_STATE_SCRIPT_B64" \
|
||||
"$IMAGE_NAME" \
|
||||
-lc '
|
||||
set -euo pipefail
|
||||
@@ -45,13 +53,10 @@ run_openclaw() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
home_dir="$(mktemp -d /tmp/openclaw-agents-delete-e2e-home.XXXXXX)"
|
||||
export HOME="$home_dir"
|
||||
export OPENCLAW_HOME="$home_dir"
|
||||
export OPENCLAW_STATE_DIR="$home_dir/.openclaw"
|
||||
export SHARED_WORKSPACE="$home_dir/workspace-shared"
|
||||
output_file="$home_dir/delete.json"
|
||||
trap '\''rm -rf "$home_dir"'\'' EXIT
|
||||
eval "$(printf "%s" "${OPENCLAW_TEST_STATE_SCRIPT_B64:?missing OPENCLAW_TEST_STATE_SCRIPT_B64}" | base64 -d)"
|
||||
export SHARED_WORKSPACE="$HOME/workspace-shared"
|
||||
output_file="$HOME/delete.json"
|
||||
trap '\''rm -rf "$HOME"'\'' EXIT
|
||||
|
||||
mkdir -p "$OPENCLAW_STATE_DIR" "$SHARED_WORKSPACE"
|
||||
node --input-type=module - <<'\''NODE'\''
|
||||
|
||||
@@ -40,17 +40,25 @@ prepare_package_tgz
|
||||
docker_e2e_package_mount_args "$PACKAGE_TGZ"
|
||||
docker_e2e_harness_mount_args
|
||||
run_log="$(docker_e2e_run_log npm-onboard-channel-agent)"
|
||||
OPENCLAW_TEST_STATE_SCRIPT_B64="$(
|
||||
node "$ROOT_DIR/scripts/lib/openclaw-test-state.mjs" shell \
|
||||
--label npm-onboard-channel-agent \
|
||||
--scenario empty \
|
||||
| base64 \
|
||||
| tr -d '\n'
|
||||
)"
|
||||
|
||||
echo "Running npm tarball onboard/channel/agent Docker E2E ($CHANNEL)..."
|
||||
if ! docker run --rm \
|
||||
-e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
||||
-e OPENCLAW_NPM_ONBOARD_CHANNEL="$CHANNEL" \
|
||||
-e "OPENCLAW_TEST_STATE_SCRIPT_B64=$OPENCLAW_TEST_STATE_SCRIPT_B64" \
|
||||
"${DOCKER_E2E_PACKAGE_ARGS[@]}" \
|
||||
"${DOCKER_E2E_HARNESS_ARGS[@]}" \
|
||||
-i "$IMAGE_NAME" bash -s >"$run_log" 2>&1 <<'EOF'
|
||||
set -euo pipefail
|
||||
|
||||
export HOME="$(mktemp -d "/tmp/openclaw-npm-onboard.XXXXXX")"
|
||||
eval "$(printf "%s" "${OPENCLAW_TEST_STATE_SCRIPT_B64:?missing OPENCLAW_TEST_STATE_SCRIPT_B64}" | base64 -d)"
|
||||
export NPM_CONFIG_PREFIX="$HOME/.npm-global"
|
||||
export PATH="$NPM_CONFIG_PREFIX/bin:$PATH"
|
||||
export OPENAI_API_KEY="sk-openclaw-npm-onboard-e2e"
|
||||
|
||||
@@ -128,7 +128,8 @@ export function laneSummary(poolLane) {
|
||||
const retries = poolLane.retries > 0 ? ` retries=${poolLane.retries}` : "";
|
||||
const cache = poolLane.cacheKey ? ` cache=${poolLane.cacheKey}` : "";
|
||||
const image = poolLane.e2eImageKind ? ` image=${poolLane.e2eImageKind}` : "";
|
||||
return `${poolLane.name}(w=${laneWeight(poolLane)} r=${resources}${timeout}${noOutputTimeout}${retries}${cache}${image})`;
|
||||
const state = poolLane.stateScenario ? ` state=${poolLane.stateScenario}` : "";
|
||||
return `${poolLane.name}(w=${laneWeight(poolLane)} r=${resources}${timeout}${noOutputTimeout}${retries}${cache}${image}${state})`;
|
||||
}
|
||||
|
||||
export function lanesNeedE2eImageKind(poolLanes, kind) {
|
||||
@@ -184,6 +185,7 @@ export function buildPlanJson(params) {
|
||||
name: poolLane.name,
|
||||
noOutputTimeoutMs: poolLane.noOutputTimeoutMs,
|
||||
resources: laneResources(poolLane),
|
||||
stateScenario: poolLane.stateScenario,
|
||||
timeoutMs: poolLane.timeoutMs,
|
||||
weight: laneWeight(poolLane),
|
||||
})),
|
||||
|
||||
@@ -43,6 +43,7 @@ function lane(name, command, options = {}) {
|
||||
retryPatterns: options.retryPatterns ?? [],
|
||||
retries: options.retries ?? 0,
|
||||
resources: options.resources ?? [],
|
||||
stateScenario: options.stateScenario,
|
||||
timeoutMs: options.timeoutMs,
|
||||
weight: options.weight ?? 1,
|
||||
};
|
||||
@@ -225,17 +226,19 @@ export const mainLanes = [
|
||||
weight: 5,
|
||||
}),
|
||||
serviceLane("onboard", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:onboard", {
|
||||
stateScenario: "empty",
|
||||
weight: 2,
|
||||
}),
|
||||
npmLane(
|
||||
"npm-onboard-channel-agent",
|
||||
"OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-onboard-channel-agent",
|
||||
{ resources: ["service"], weight: 3 },
|
||||
{ resources: ["service"], stateScenario: "empty", weight: 3 },
|
||||
),
|
||||
serviceLane("gateway-network", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:gateway-network"),
|
||||
serviceLane(
|
||||
"agents-delete-shared-workspace",
|
||||
"OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:agents-delete-shared-workspace",
|
||||
{ stateScenario: "empty" },
|
||||
),
|
||||
serviceLane("mcp-channels", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:mcp-channels", {
|
||||
resources: ["npm"],
|
||||
@@ -256,6 +259,7 @@ export const mainLanes = [
|
||||
"update-channel-switch",
|
||||
"OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:update-channel-switch",
|
||||
{
|
||||
stateScenario: "update-stable",
|
||||
timeoutMs: 30 * 60 * 1000,
|
||||
weight: 3,
|
||||
},
|
||||
@@ -477,7 +481,7 @@ const releasePathPackageUpdateCoreLanes = [
|
||||
npmLane(
|
||||
"npm-onboard-channel-agent",
|
||||
"OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-onboard-channel-agent",
|
||||
{ resources: ["service"], weight: 3 },
|
||||
{ resources: ["service"], stateScenario: "empty", weight: 3 },
|
||||
),
|
||||
npmLane("doctor-switch", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:doctor-switch", {
|
||||
weight: 3,
|
||||
@@ -486,6 +490,7 @@ const releasePathPackageUpdateCoreLanes = [
|
||||
"update-channel-switch",
|
||||
"OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:update-channel-switch",
|
||||
{
|
||||
stateScenario: "update-stable",
|
||||
timeoutMs: 30 * 60 * 1000,
|
||||
weight: 3,
|
||||
},
|
||||
@@ -496,6 +501,7 @@ const primaryReleasePathChunks = {
|
||||
core: [
|
||||
lane("qr", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:qr"),
|
||||
serviceLane("onboard", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:onboard", {
|
||||
stateScenario: "empty",
|
||||
weight: 2,
|
||||
}),
|
||||
serviceLane("gateway-network", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:gateway-network"),
|
||||
|
||||
Reference in New Issue
Block a user