Skip to content

test(snapshots): expose Vite+ managed binaries with vp env setup#2110

Merged
fengmk2 merged 10 commits into
voidzero-dev:mainfrom
liangmiQwQ:liang/codex/add-corepack-snap-allowlist
Jul 10, 2026
Merged

test(snapshots): expose Vite+ managed binaries with vp env setup#2110
fengmk2 merged 10 commits into
voidzero-dev:mainfrom
liangmiQwQ:liang/codex/add-corepack-snap-allowlist

Conversation

@liangmiQwQ

@liangmiQwQ liangmiQwQ commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

At present, the PTY runner will find the needed binaries like node, and inject these directories directly into PATH.

This can cause problem, if the users are already using Vite+, it might leak the node shim in the user's original VP_HOME, triggering Node.js re-fetching and behavior-differences, it also makes seed_runtime invalid. There are more problems, like missing the real vp binary will cause incomplete functionality, npm version is not locked, corepack is missing etc.

This PR refactors this part. We simulate the true VP_HOME structure, installing the vp binary into VP_HOME/current/bin with hardlink, put the local cli into VP_HOME/current/node_modules/vite-plus, then run vp setup to 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

@netlify

netlify Bot commented Jul 9, 2026

Copy link
Copy Markdown

Deploy Preview for viteplus-preview ready!

Name Link
🔨 Latest commit f619174
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a505ec7d723c8000866dc62
😎 Deploy Preview https://deploy-preview-2110--viteplus-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@liangmiQwQ

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread crates/vite_cli_snapshots/tests/cli_snapshots/flavor.rs Outdated
@liangmiQwQ liangmiQwQ marked this pull request as draft July 9, 2026 11:26
@liangmiQwQ

liangmiQwQ commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator Author

@fengmk2 While working on #2003, I found that the PTY test just simply use which to find Node and related binaries and put the directory into PATH, is that intentional? Would it make sense to run vp env setup and use <case>/home/.vite-plus/bin?

@fengmk2

fengmk2 commented Jul 9, 2026

Copy link
Copy Markdown
Member

@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.

@liangmiQwQ

Copy link
Copy Markdown
Collaborator Author

@fengmk2 We've already had seed_runtime so there should not be any network fetching by default, right? So creating shim itself should not take too much time?

@fengmk2

fengmk2 commented Jul 9, 2026

Copy link
Copy Markdown
Member

Then go ahead and refactor it according to your plan. If there's no increase in runtime, there's no problem.

@liangmiQwQ

Copy link
Copy Markdown
Collaborator Author

Would it make sense to run vp env setup and use <case>/home/.vite-plus/bin?

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 <case>/home/.vite-plus/bin for global flavor, and it will also reduce the maintaining pressure. Would it bring another benefit 😄

@fengmk2

fengmk2 commented Jul 9, 2026

Copy link
Copy Markdown
Member

@liangmiQwQ No problem, the whitelist is a bit over-engineered right now, which has made it unnecessarily complex.

@liangmiQwQ liangmiQwQ force-pushed the liang/codex/add-corepack-snap-allowlist branch from 0b5f3fd to 99530cc Compare July 9, 2026 13:06
@liangmiQwQ liangmiQwQ changed the title test(snapshots): add corepack to tools allowlist test(snapshots): expose Vite+ managed binaries with vp env setup Jul 9, 2026
@liangmiQwQ

Copy link
Copy Markdown
Collaborator Author

Nice, it almost works! I will simplify the implementation and do some validation tomorrow 😄

@liangmiQwQ

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread packages/tools/src/migrate-snap-tests.ts
Comment thread crates/vite_cli_snapshots/tests/cli_snapshots/main.rs
@liangmiQwQ liangmiQwQ marked this pull request as ready for review July 10, 2026 01:21

@fengmk2 fengmk2 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@liangmiQwQ Good job!

@fengmk2 fengmk2 merged commit 3fe3f0d into voidzero-dev:main Jul 10, 2026
51 checks passed
@liangmiQwQ liangmiQwQ deleted the liang/codex/add-corepack-snap-allowlist branch July 10, 2026 03:15
fengmk2 added a commit that referenced this pull request Jul 10, 2026
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.
fengmk2 added a commit that referenced this pull request Jul 10, 2026
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.
fengmk2 added a commit that referenced this pull request Jul 10, 2026
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.
graphite-app Bot pushed a commit that referenced this pull request Jul 10, 2026
…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.
wan9chi added a commit that referenced this pull request Jul 16, 2026
)

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants