




















@@ -166,12 +166,18 @@ BASELINE_TAG_URL=""
166166FRESH_TAG_URL=""
167167UPDATE_TAG_URL=""
168168UPDATE_DOCKER_HOST_ARGS=()
169+NPM_CACHE_DIR="${OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR:-}"
170+NPM_CACHE_OWNED=0
171+NPM_CACHE_DOCKER_ARGS=()
169172170173cleanup() {
171174if [[ -n "$UPDATE_SERVER_PID" ]]; then
172175kill "$UPDATE_SERVER_PID" >/dev/null 2>&1 || true
173176wait "$UPDATE_SERVER_PID" >/dev/null 2>&1 || true
174177fi
178+if [[ "$NPM_CACHE_OWNED" == "1" && -n "$NPM_CACHE_DIR" ]]; then
179+ rm -rf "$NPM_CACHE_DIR"
180+fi
175181 rm -rf "$LATEST_DIR" "$UPDATE_DIR"
176182}
177183@@ -288,6 +294,20 @@ prepare_update_host_access() {
288294fi
289295}
290296297+prepare_npm_cache() {
298+if [[ -z "$NPM_CACHE_DIR" ]]; then
299+ NPM_CACHE_DIR="$(mktemp -d)"
300+ NPM_CACHE_OWNED=1
301+fi
302+ mkdir -p "$NPM_CACHE_DIR"
303+ chmod 0777 "$NPM_CACHE_DIR"
304+ NPM_CACHE_DOCKER_ARGS=(
305+ -v "${NPM_CACHE_DIR}:/npm-cache"
306+ -e npm_config_cache=/npm-cache
307+ -e NPM_CONFIG_CACHE=/npm-cache
308+ )
309+}
310+291311start_update_server() {
292312if [[ -z "$UPDATE_PORT" ]]; then
293313 UPDATE_PORT="$(allocate_host_port)"
@@ -326,12 +346,14 @@ if [[ "$SKIP_UPDATE" == "1" ]]; then
326346else
327347 prepare_update_tarball
328348 prepare_update_host_access
349+ prepare_npm_cache
329350 start_update_server
330351331352echo "==> Run installer smoke test (root): $FRESH_TAG_URL"
332353 docker run --rm -t \
333354 --platform "$SMOKE_PLATFORM" \
334355${UPDATE_DOCKER_HOST_ARGS[@]+"${UPDATE_DOCKER_HOST_ARGS[@]}"} \
356+"${NPM_CACHE_DOCKER_ARGS[@]}" \
335357 -v "${LATEST_DIR}:/out" \
336358 -e OPENCLAW_INSTALL_URL="$INSTALL_URL" \
337359 -e OPENCLAW_INSTALL_PACKAGE="$PACKAGE_NAME" \
@@ -353,6 +375,7 @@ else
353375 docker run --rm -t \
354376 --platform "$SMOKE_PLATFORM" \
355377${UPDATE_DOCKER_HOST_ARGS[@]+"${UPDATE_DOCKER_HOST_ARGS[@]}"} \
378+"${NPM_CACHE_DOCKER_ARGS[@]}" \
356379 -e OPENCLAW_INSTALL_PACKAGE="$PACKAGE_NAME" \
357380 -e OPENCLAW_INSTALL_SMOKE_MODE=update \
358381 -e OPENCLAW_INSTALL_UPDATE_BASELINE="$UPDATE_BASELINE_VERSION" \
@@ -371,6 +394,7 @@ else
371394 docker run --rm -t \
372395 --platform "$SMOKE_PLATFORM" \
373396${UPDATE_DOCKER_HOST_ARGS[@]+"${UPDATE_DOCKER_HOST_ARGS[@]}"} \
397+"${NPM_CACHE_DOCKER_ARGS[@]}" \
374398 -e OPENCLAW_INSTALL_PACKAGE="$PACKAGE_NAME" \
375399 -e OPENCLAW_INSTALL_SMOKE_MODE=npm-global \
376400 -e OPENCLAW_INSTALL_UPDATE_BASELINE="$UPDATE_BASELINE_VERSION" \
@@ -389,6 +413,7 @@ LATEST_VERSION="${LATEST_VERSION:-}"
389413if [[ "$SKIP_NONROOT" == "1" ]]; then
390414echo "==> Skip non-root installer smoke (OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1)"
391415else
416+ prepare_npm_cache
392417if [[ "$SKIP_NONROOT_IMAGE_BUILD" == "1" ]]; then
393418echo "==> Reuse prebuilt non-root image: $NONROOT_IMAGE"
394419else
@@ -403,6 +428,7 @@ else
403428echo "==> Run installer non-root test: $INSTALL_URL"
404429 docker run --rm -t \
405430 --platform "$NONROOT_PLATFORM" \
431+"${NPM_CACHE_DOCKER_ARGS[@]}" \
406432 -e OPENCLAW_INSTALL_URL="$INSTALL_URL" \
407433 -e OPENCLAW_INSTALL_PACKAGE="$PACKAGE_NAME" \
408434 -e OPENCLAW_INSTALL_METHOD=npm \
@@ -427,6 +453,7 @@ echo "==> Run CLI installer non-root test (same image)"
427453docker run --rm -t \
428454 --platform "$NONROOT_PLATFORM" \
429455 --entrypoint /bin/bash \
456+"${NPM_CACHE_DOCKER_ARGS[@]}" \
430457 -e OPENCLAW_INSTALL_URL="$INSTALL_URL" \
431458 -e OPENCLAW_INSTALL_CLI_URL="$CLI_INSTALL_URL" \
432459 -e OPENCLAW_NO_ONBOARD=1 \
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。