diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cef2e8c0f8..fa639cc6ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -970,6 +970,12 @@ jobs: run: | "$HOME/.vite-plus/bin/vp" node --version \ || echo "prewarm failed; cases will download the runtime on demand" + # Warm the Node.js version index cache (~1h TTL) into the runtime + # seed. Cases without a version pin resolve "latest LTS" before + # their first output, and a stalled nodejs.org fetch there times + # out the 60s step budget (same stall class as #2390). + "$HOME/.vite-plus/bin/vp" env list-remote > /dev/null \ + || echo "index prewarm failed; cases will fetch the version index on demand" - name: Install Playwright Chromium run: pnpm exec playwright install chromium @@ -1059,6 +1065,12 @@ jobs: run: | "$USERPROFILE/.vite-plus/bin/vp.exe" node --version \ || echo "prewarm failed; cases will download the runtime on demand" + # Warm the Node.js version index cache (~1h TTL) into the runtime + # seed. Cases without a version pin resolve "latest LTS" before + # their first output, and a stalled nodejs.org fetch there times + # out the 60s step budget (same stall class as #2390). + "$USERPROFILE/.vite-plus/bin/vp.exe" env list-remote > /dev/null \ + || echo "index prewarm failed; cases will fetch the version index on demand" - name: Install Playwright Chromium shell: bash diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/main.rs b/crates/vp_cli_snapshots/tests/cli_snapshots/main.rs index c0991f0014..23dc1572de 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/main.rs +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/main.rs @@ -653,6 +653,12 @@ impl CaseHome { env.insert("TERM".into(), "xterm-256color".into()); env.insert("VP_CLI_TEST".into(), "1".into()); env.insert("NODE_NO_WARNINGS".into(), "1".into()); + // Cap download attempts far below vp's 10-minute default: a stalled + // runtime or package-manager download must fail fast enough for vp's + // retry (3 attempts, exponential backoff) to finish inside the 60s + // step budget. Healthy CI downloads take ~1s; Windows runners stall + // intermittently (see command_cache_bun in the #2390 stall class). + env.insert("VP_DOWNLOAD_TIMEOUT".into(), "30".into()); env.insert("VP_HOME".into(), self.vp_home().into_os_string()); if cfg!(windows) { env.insert("USERPROFILE".into(), self.home.clone().into_os_string());