test(e2e): harden multi-node update smoke

This commit is contained in:
Vincent Koc
2026-05-25 01:49:06 +02:00
parent 8dc6b4d330
commit ec168fa2bd
2 changed files with 27 additions and 3 deletions

View File

@@ -1667,6 +1667,7 @@
"test:docker:live:all": "node scripts/run-with-env.mjs OPENCLAW_DOCKER_ALL_LIVE_MODE=only -- node scripts/test-docker-all.mjs",
"test:docker:local:all": "node scripts/run-with-env.mjs OPENCLAW_DOCKER_ALL_LIVE_MODE=skip -- node scripts/test-docker-all.mjs",
"test:docker:mcp-channels": "bash scripts/e2e/mcp-channels-docker.sh",
"test:docker:multi-node-update": "bash scripts/e2e/multi-node-update-docker.sh",
"test:docker:codex-on-demand": "bash scripts/e2e/codex-on-demand-docker.sh",
"test:docker:npm-onboard-channel-agent": "bash scripts/e2e/npm-onboard-channel-agent-docker.sh",
"test:docker:npm-onboard-discord-channel-agent": "OPENCLAW_NPM_ONBOARD_CHANNEL=discord bash scripts/e2e/npm-onboard-channel-agent-docker.sh",

View File

@@ -159,13 +159,16 @@ case "\$command" in
echo "systemctl shim: unit not found: \$unit" >&2
exit 1
fi
exec_start="\$(grep "^ExecStart=" "\$unit" | head -1 | sed "s/^ExecStart=//")"
exec_start_line="\$(grep "^ExecStart=" "\$unit" | head -1 || true)"
exec_start="\${exec_start_line#ExecStart=}"
if [ -z "\$exec_start" ]; then
echo "systemctl shim: no ExecStart in \$unit" >&2
exit 1
fi
# Source EnvironmentFile if present
env_file="\$(grep "^EnvironmentFile=" "\$unit" | head -1 | sed "s/^EnvironmentFile=//" | sed "s/^-//")"
env_file_line="\$(grep "^EnvironmentFile=" "\$unit" | head -1 || true)"
env_file="\${env_file_line#EnvironmentFile=}"
env_file="\${env_file#-}"
if [ -n "\$env_file" ] && [ -f "\$env_file" ]; then
set -a; source "\$env_file"; set +a
fi
@@ -197,7 +200,20 @@ case "\$command" in
fi
;;
show)
echo "ActiveState=inactive"
if [ -s "$GATEWAY_PID_FILE" ] && kill -0 "\$(cat "$GATEWAY_PID_FILE" 2>/dev/null)" 2>/dev/null; then
pid="\$(cat "$GATEWAY_PID_FILE")"
echo "ActiveState=active"
echo "SubState=running"
echo "MainPID=\$pid"
echo "ExecMainStatus=0"
echo "ExecMainCode=0"
else
echo "ActiveState=inactive"
echo "SubState=dead"
echo "MainPID=0"
echo "ExecMainStatus=0"
echo "ExecMainCode=0"
fi
;;
*)
echo "systemctl shim: ignoring: \$*"
@@ -240,6 +256,8 @@ echo "── Step 5: Switch PATH so node-B comes first ──"
# Crucially, node-B has its own working npm with its own global prefix,
# but openclaw is NOT installed there.
export PATH="$NPM_PREFIX_B/bin:$NODE_B_ROOT/bin:$NPM_PREFIX_A/bin:$NODE_A_DIR:$PATH"
export npm_config_prefix="$NPM_PREFIX_B"
export NPM_CONFIG_PREFIX="$NPM_PREFIX_B"
# Verify node-B npm works independently.
echo "node-B npm prefix: $($NODE_B_ROOT/bin/node $NODE_B_ROOT/bin/npm prefix -g 2>/dev/null || echo unknown)"
@@ -343,6 +361,7 @@ fi
echo ""
echo "── Step 9: Try starting the gateway with the post-update unit ──"
GATEWAY_START_FAILED=0
if [ -f "$GATEWAY_UNIT_PATH" ]; then
systemctl restart 2>&1 || true
sleep 3
@@ -359,6 +378,7 @@ if [ -f "$GATEWAY_UNIT_PATH" ]; then
else
echo "BUG: Gateway failed to start with the post-update unit"
cat "$GATEWAY_DAEMON_LOG" 2>/dev/null | tail -20 || true
GATEWAY_START_FAILED=1
fi
fi
@@ -383,6 +403,9 @@ if [ -f "$GATEWAY_UNIT_PATH" ]; then
EXIT_CODE=1
fi
fi
if [ "$GATEWAY_START_FAILED" -ne 0 ]; then
EXIT_CODE=1
fi
exit $EXIT_CODE
' || CONTAINER_EXIT=$?