test: annotate Docker test-state scenarios

This commit is contained in:
Peter Steinberger
2026-04-28 11:10:27 +01:00
parent ade9aaae89
commit c9ead1b928
6 changed files with 66 additions and 12 deletions

View File

@@ -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'\''

View File

@@ -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"

View File

@@ -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),
})),

View File

@@ -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"),