test(snapshots): expose Vite+ managed binaries with vp env setup#2110
Conversation
✅ Deploy Preview for viteplus-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0b5f3fd63a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@liangmiQwQ We need to consider network speed. Is it possible to make it configurable? The default is still the original processing method, and then you can configure it to be enabled for your scenario. |
|
@fengmk2 We've already had |
|
Then go ahead and refactor it according to your plan. If there's no increase in runtime, there's no problem. |
At present, Vite+ PTY snap tests only allow tools run in the allowlist, so installed global packages are also disallowed to run. If we do this change, we can just simply allow all tools in |
|
@liangmiQwQ No problem, the whitelist is a bit over-engineered right now, which has made it unnecessarily complex. |
0b5f3fd to
99530cc
Compare
corepack to tools allowlistvp env setup
|
Nice, it almost works! I will simplify the implementation and do some validation tomorrow 😄 |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 38f4701d86
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…epack-snap-allowlist # Conflicts: # crates/vite_cli_snapshots/tests/cli_snapshots/main.rs
Migrates 9 of the 10 npm-global shim cases (global npm install/uninstall link behavior) from packages/cli/snap-tests-global, unblocked by #2110 removing the step program allow-list. Runner/vpt additions the cases need: - `vpt stat-file` gains a `symlink` state (via symlink_metadata, shell `test -L` semantics) so link assertions keep their predicate fidelity; no existing baseline stats a symlink. - vpt expands a leading `$NAME` env reference in its arguments (`$VP_HOME/bin/x`), replacing the shell expansion the legacy runner provided; unset variables stay verbatim. - The per-case npm global prefix joins the redaction paths as `<npm-prefix>` (a sibling of `home`, so the `<home>` pair never matched it; `npm config get prefix` prints it). - New WHICH_NODE_VERSION_RE masks `vp env which`'s `Node:` field and the BinConfig `"nodeVersion"` value, which track the environment's managed default runtime rather than a fixture pin. The npm install/uninstall steps run with `tty = false`: under a PTY the npm shim's link-hint path probes the terminal and blocks on a reply the vt100 emulator never sends, while the legacy runner always piped stdio. npm-global-install-custom-prefix-on-path stays in the legacy tree: its `PATH=$(pwd)/...:$PATH` dynamic prefix is not expressible without a shell. Part of #2116.
Migrates 9 of the 10 npm-global shim cases (global npm install/uninstall link behavior) from packages/cli/snap-tests-global, unblocked by #2110 removing the step program allow-list. Runner/vpt additions the cases need: - `vpt stat-file` gains a `symlink` state (via symlink_metadata, shell `test -L` semantics) so link assertions keep their predicate fidelity; no existing baseline stats a symlink. - vpt expands a leading `$NAME` env reference in its arguments (`$VP_HOME/bin/x`), replacing the shell expansion the legacy runner provided; unset variables stay verbatim. - The per-case npm global prefix joins the redaction paths as `<npm-prefix>` (a sibling of `home`, so the `<home>` pair never matched it; `npm config get prefix` prints it). - New WHICH_NODE_VERSION_RE masks `vp env which`'s `Node:` field and the BinConfig `"nodeVersion"` value, which track the environment's managed default runtime rather than a fixture pin. The npm install/uninstall steps run with `tty = false`: under a PTY the npm shim's link-hint path probes the terminal and blocks on a reply the vt100 emulator never sends, while the legacy runner always piped stdio. npm-global-install-custom-prefix-on-path stays in the legacy tree: its `PATH=$(pwd)/...:$PATH` dynamic prefix is not expressible without a shell. Part of #2116.
Migrates 9 of the 10 npm-global shim cases (global npm install/uninstall link behavior) from packages/cli/snap-tests-global, unblocked by #2110 removing the step program allow-list. Runner/vpt additions the cases need: - `vpt stat-file` gains a `symlink` state (via symlink_metadata, shell `test -L` semantics) so link assertions keep their predicate fidelity; no existing baseline stats a symlink. - vpt expands a leading `$NAME` env reference in its arguments (`$VP_HOME/bin/x`), replacing the shell expansion the legacy runner provided; unset variables stay verbatim. - The per-case npm global prefix joins the redaction paths as `<npm-prefix>` (a sibling of `home`, so the `<home>` pair never matched it; `npm config get prefix` prints it). - New WHICH_NODE_VERSION_RE masks `vp env which`'s `Node:` field and the BinConfig `"nodeVersion"` value, which track the environment's managed default runtime rather than a fixture pin. The npm install/uninstall steps run with `tty = false`: under a PTY the npm shim's link-hint path probes the terminal and blocks on a reply the vt100 emulator never sends, while the legacy runner always piped stdio. npm-global-install-custom-prefix-on-path stays in the legacy tree: its `PATH=$(pwd)/...:$PATH` dynamic prefix is not expressible without a shell. Part of #2116.
…te (#2134) Migrates 9 of the 10 npm-global shim cases (global npm install/uninstall link behavior) from packages/cli/snap-tests-global, unblocked by #2110 removing the step program allow-list. Runner/vpt additions the cases need: - `vpt stat-file` gains a `symlink` state (via symlink_metadata, shell `test -L` semantics) so link assertions keep their predicate fidelity; no existing baseline stats a symlink. - vpt expands a leading `$NAME` env reference in its arguments (`$VP_HOME/bin/x`), replacing the shell expansion the legacy runner provided; unset variables stay verbatim. - The per-case npm global prefix joins the redaction paths as `<npm-prefix>` (a sibling of `home`, so the `<home>` pair never matched it; `npm config get prefix` prints it). - New WHICH_NODE_VERSION_RE masks `vp env which`'s `Node:` field and the BinConfig `"nodeVersion"` value, which track the environment's managed default runtime rather than a fixture pin. The npm install/uninstall steps run with `tty = false`: under a PTY the npm shim's link-hint path probes the terminal and blocks on a reply the vt100 emulator never sends, while the legacy runner always piped stdio. npm-global-install-custom-prefix-on-path stays in the legacy tree: its `PATH=$(pwd)/...:$PATH` dynamic prefix is not expressible without a shell. Part of #2116.
) Release vite-plus v0.2.5: Cleaner environments and more reliable workflows. This release adds cleanup and package version commands, supports TypeScript 7 declaration generation, reduces the standalone binary size, and hardens task tracking, CLI output, package-manager routing, Docker workflows, and project scaffolding. ### Highlights - Add `vp env clean` to remove unused managed Node.js runtimes and package-manager caches ([#2003](#2003)), by @liangmiQwQ - Add `vp pm version`, forwarding native version commands to npm, pnpm, Yarn, and Bun ([#2127](#2127)), by @jong-kyung - Add TypeScript 7 support to declaration generation and generated library projects with tsdown `0.22.7` ([#2104](#2104), [#2168](#2168)), by @wan9chi - Improve automatic task input tracking for Bun on macOS, Linux containers with constrained `/dev/shm`, and Windows process images, reduce Windows backing-file allocation, and clarify task wait failures ([vite-task#515](voidzero-dev/vite-task#515), [vite-task#518](voidzero-dev/vite-task#518), [vite-task#523](voidzero-dev/vite-task#523), [vite-task#524](voidzero-dev/vite-task#524), [vite-task#542](voidzero-dev/vite-task#542), [#2126](#2126), [#2167](#2167)), by @wan9chi - Prevent CLI diagnostics from truncating or panicking when inherited standard output or error is nonblocking ([#2172](#2172), [#2173](#2173)), by @wan9chi ### Fixes & Enhancements - Reduce standalone `vp` binary sizes by about 5% on Linux and macOS and 19% on Windows ([#2043](#2043)), by @fengmk2 - Keep the Docker image non-root by default while allowing passwordless `sudo` for Playwright browser dependencies and system packages ([#2088](#2088)), by @fengmk2 - Ignore `.env` and `.env.*` in generated projects while keeping `.env.example` trackable ([#2095](#2095)), by @forehalo - Create `vp-use.cmd` after the Windows environment bin directory is ready and document its Command Prompt-only usage ([#2128](#2128)), by @liangmiQwQ - Render user-facing process statuses and paths without Rust debug wrappers ([#2130](#2130)), by @liangmiQwQ - Make `vp dedupe` fall back to `yarn install` with a warning on Yarn Classic ([#2139](#2139)), by @jong-kyung - Ensure package-manager child processes, including Bun, can always find the managed Node.js runtime ([#2158](#2158)), by @BlankParticle ### Docs - Update the release-manager post-release guidance ([#2096](#2096)), by @wan9chi - Add Windows to the Namespace sponsor credit ([#2108](#2108)), by @fengmk2 - Document installer and runtime environment variables, registry settings, TLS options, and precedence rules ([#2114](#2114)), by @yukinoshi - Mark shell examples in `CONTRIBUTING.md` as Bash code blocks ([#2159](#2159)), by @BlankParticle ### Chore - Assign prepared release PRs to the workflow actor ([#2094](#2094)), by @wan9chi - Complete the PTY snapshot migration and harden the runner, fixtures, release-version redaction, registry teardown, timeouts, and Linux parallelism ([#2071](#2071), [#2080](#2080), [#2084](#2084), [#2099](#2099), [#2102](#2102), [#2103](#2103), [#2107](#2107), [#2109](#2109), [#2115](#2115), [#2117](#2117), [#2118](#2118), [#2119](#2119), [#2120](#2120), [#2121](#2121), [#2131](#2131), [#2132](#2132), [#2134](#2134), [#2137](#2137), [#2138](#2138), [#2141](#2141), [#2143](#2143), [#2145](#2145), [#2182](#2182)), by @fengmk2 and @wan9chi - Expose Vite+ managed binaries consistently inside snapshot fixtures ([#2110](#2110)), by @liangmiQwQ - Exclude PTY snapshot configuration from Vitest discovery and remove the legacy snapshot infrastructure ([#2135](#2135), [#2146](#2146)), by @jong-kyung - Modernize Windows runners, registry bridge publishing, native size reporting, merge-base comparisons, and package-manager installation CI ([#2083](#2083), [#2100](#2100), [#2105](#2105), [#2106](#2106), [#2112](#2112), [#2133](#2133)), by @fengmk2 - Verify that created monorepo libraries emit declarations in CI ([#2171](#2171)), by @wan9chi ### Bundled Versions | Tool | Version | Source | | --------------- | ------- | ----------------------------------------------------------------------- | | vite | `8.1.4` | [`a477454`](vitejs/vite@a477454) | | rolldown | `1.1.5` | [`f09947a`](rolldown/rolldown@f09947a) | | tsdown | `0.22.7` | [npm](https://npmx.dev/package/tsdown/v/0.22.7) | | vitest | `4.1.10` | [npm](https://npmx.dev/package/vitest/v/4.1.10) | | oxlint | `1.73.0` | [npm](https://npmx.dev/package/oxlint/v/1.73.0) | | oxlint-tsgolint | `0.24.0` | [npm](https://npmx.dev/package/oxlint-tsgolint/v/0.24.0) | | oxfmt | `0.58.0` | [npm](https://npmx.dev/package/oxfmt/v/0.58.0) | ### Upgrade ```bash vp upgrade ``` ### New Contributors Welcome @yukinoshi and @BlankParticle. **Full Changelog**: v0.2.4...v0.2.5 --- Merging this PR will trigger the release workflow. --------- Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com> Co-authored-by: wan9chi <dk4rest@gmail.com>
At present, the PTY runner will find the needed binaries like
node, and inject these directories directly intoPATH.This can cause problem, if the users are already using Vite+, it might leak the
nodeshim in the user's originalVP_HOME, triggering Node.js re-fetching and behavior-differences, it also makesseed_runtimeinvalid. There are more problems, like missing the realvpbinary will cause incomplete functionality,npmversion is not locked,corepackis missing etc.This PR refactors this part. We simulate the true
VP_HOMEstructure, installing thevpbinary intoVP_HOME/current/binwith hardlink, put the local cli intoVP_HOME/current/node_modules/vite-plus, then runvp setupto generate bins, finally expose the bins according to the flavor.It also removes the stale tool whitelist, all the bins in the bin directory are accessible. Not only does this allow us to migrate global package related tests here in the future, but it also reduces the maintenance costs.
🤖 Generated with Codex