From 4e24470ced97ad11f5e9732102d2c47db76ef186 Mon Sep 17 00:00:00 2001 From: Alix-007 Date: Wed, 15 Jul 2026 11:47:49 +0800 Subject: [PATCH] fix(qa-lab): prevent Multipass Node download hangs (#107702) --- extensions/qa-lab/src/multipass.runtime.test.ts | 6 ++++++ extensions/qa-lab/src/multipass.runtime.ts | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/extensions/qa-lab/src/multipass.runtime.test.ts b/extensions/qa-lab/src/multipass.runtime.test.ts index 4056c51417ad..fdc79401eab1 100644 --- a/extensions/qa-lab/src/multipass.runtime.test.ts +++ b/extensions/qa-lab/src/multipass.runtime.test.ts @@ -141,6 +141,12 @@ describe("qa multipass runtime", () => { expect(script).toContain("pnpm install --frozen-lockfile"); expect(script).toContain("pnpm build"); expect(script).toContain("corepack prepare 'pnpm@"); + expect(script).toContain( + 'curl -fsSL --connect-timeout 10 --max-time 120 --retry 2 --retry-delay 2 "${base_url}/SHASUMS256.txt" -o "${node_tmp_dir}/SHASUMS256.txt"', + ); + expect(script).toContain( + 'curl -fsSL --connect-timeout 10 --max-time 120 --retry 2 --retry-delay 2 "${base_url}/${tarball_name}" -o "${node_tmp_dir}/${tarball_name}"', + ); expect(script).toContain("'pnpm' 'openclaw' 'qa' 'suite' '--transport' 'qa-channel'"); expect(script).toContain("'--provider-mode' 'live-frontier'"); expect(script).toContain("'--scenario' 'channel-chat-baseline'"); diff --git a/extensions/qa-lab/src/multipass.runtime.ts b/extensions/qa-lab/src/multipass.runtime.ts index b71040583337..7f562c7fd20d 100644 --- a/extensions/qa-lab/src/multipass.runtime.ts +++ b/extensions/qa-lab/src/multipass.runtime.ts @@ -410,10 +410,10 @@ function renderQaMultipassGuestScript( ' node_tmp_dir="$(mktemp -d)"', " trap 'rm -rf \"${node_tmp_dir}\"' RETURN", ' base_url="https://nodejs.org/dist/latest-v22.x"', - ' curl -fsSL "${base_url}/SHASUMS256.txt" -o "${node_tmp_dir}/SHASUMS256.txt" >>"$BOOTSTRAP_LOG" 2>&1', + ' curl -fsSL --connect-timeout 10 --max-time 120 --retry 2 --retry-delay 2 "${base_url}/SHASUMS256.txt" -o "${node_tmp_dir}/SHASUMS256.txt" >>"$BOOTSTRAP_LOG" 2>&1', ' tarball_name="$(awk \'/linux-\'"${node_arch}"\'\\.tar\\.xz$/ { print $2; exit }\' "${node_tmp_dir}/SHASUMS256.txt")"', ' [ -n "${tarball_name}" ] || { echo "unable to resolve node tarball for ${node_arch}" >&2; return 1; }', - ' curl -fsSL "${base_url}/${tarball_name}" -o "${node_tmp_dir}/${tarball_name}" >>"$BOOTSTRAP_LOG" 2>&1', + ' curl -fsSL --connect-timeout 10 --max-time 120 --retry 2 --retry-delay 2 "${base_url}/${tarball_name}" -o "${node_tmp_dir}/${tarball_name}" >>"$BOOTSTRAP_LOG" 2>&1', ' (cd "${node_tmp_dir}" && grep " ${tarball_name}$" SHASUMS256.txt | sha256sum -c -) >>"$BOOTSTRAP_LOG" 2>&1', ' extract_dir="${tarball_name%.tar.xz}"', ' sudo mkdir -p /usr/local/lib/nodejs >>"$BOOTSTRAP_LOG" 2>&1',