Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
224b728
docs(rfc): plan Vitest v5 upgrade
fengmk2 Aug 24, 2026
0dfb308
docs(rfc): refine Vitest v5 migration
fengmk2 Aug 30, 2026
b624194
docs(rfc): target final Vitest v5 release
fengmk2 Sep 3, 2026
f152538
feat(test): upgrade to Vitest v5 with migration support
fengmk2 Sep 6, 2026
965617b
fix(tools): preserve Vitest v5 pins during remote sync
fengmk2 Sep 6, 2026
0076dfe
fix(migrate): preserve Vitest config and assertion semantics
fengmk2 Sep 10, 2026
82e0edd
fix(ci): align vendored Vitest dependencies before install
fengmk2 Sep 11, 2026
c35dda3
fix(ci): preserve Vitest alignment during branding
fengmk2 Sep 11, 2026
6507dda
fix(test): stabilize Vitest v5 CI coverage
fengmk2 Sep 11, 2026
75142db
fix(test): backport Vitest browser define handling
fengmk2 Sep 11, 2026
870f6f5
fix(ci): exclude Rolldown from Vitest upgrade validation
fengmk2 Sep 11, 2026
a352dc9
ci: remove vendored Vite test gate
fengmk2 Sep 11, 2026
b6e8b3e
fix(ecosystem): use supported Node runtimes before migration
fengmk2 Sep 11, 2026
92c028a
refactor(migrate): replace Babel with native Oxc analysis
fengmk2 Sep 11, 2026
3113190
fix(migrate): preserve Oxc AST JSON during analysis
fengmk2 Sep 12, 2026
49a0409
fix(deps): preserve Vitest lockfile entry after rebase
fengmk2 Sep 12, 2026
ba4d2eb
fix(test): scope browser aliases and refresh Vite snapshots
fengmk2 Sep 14, 2026
09ea5d7
fix(deps): normalize Vitest transitive lockfile entries
fengmk2 Sep 14, 2026
62252e1
fix(migrate): address Vitest v5 review findings
fengmk2 Sep 15, 2026
468a349
fix(test): resolve Vitest v5 CI failures
fengmk2 Sep 15, 2026
2ac4b32
fix(deps): upgrade rustls to patched release
fengmk2 Sep 15, 2026
6fc51ad
docs(test): classify Preview timer bug as pre-existing
fengmk2 Sep 15, 2026
87652cf
fix(migrate): preserve Vitest inheritance, timeouts, and global scopes
fengmk2 Sep 15, 2026
da03863
fix(migrate): resolve active Vitest configs and setup scopes
fengmk2 Sep 15, 2026
8028fc9
test: stabilize Vitest v5 CI fixtures
fengmk2 Sep 15, 2026
e871044
fix(migrate): honor Vitest discovery and setup resolution
fengmk2 Sep 15, 2026
5a9c829
fix: upgrade Vitest to 5.0.1 and remove browser define backport
fengmk2 Sep 15, 2026
bcfd5b8
test: stabilize Vitest snapshot CI
fengmk2 Sep 15, 2026
0115f93
fix(migrate): detect actual Vitest source usage
fengmk2 Sep 15, 2026
97d5e25
fix(migrate): accept current Node runtime aliases
fengmk2 Sep 15, 2026
9a54b22
fix(migrate): refine Vitest v5 migration and diagnostics
fengmk2 Sep 15, 2026
3df0bab
fix(migrate): upgrade Node pins and remove migration state
fengmk2 Sep 15, 2026
f97be55
feat(migrate): automate Vitest v5 benchmark and API settings
fengmk2 Sep 15, 2026
1c5cc95
refactor(migrate): simplify Vitest v5 migration helpers
fengmk2 Sep 16, 2026
9c254e4
chore: align workspace catalog ordering with sync-remote
fengmk2 Sep 16, 2026
489a5af
fix(migrate): prefer plain benchmark names when safe
fengmk2 Sep 16, 2026
1147c6d
fix(migrate): preserve benchmark ownership and rollback blockers
fengmk2 Sep 16, 2026
e17e259
fix(migrate): handle in-source Vitest benchmarks
fengmk2 Sep 16, 2026
c4f3573
fix(migrate): remove configless Vitest review prompts
fengmk2 Sep 16, 2026
c48e8d0
feat(migrate): document Vitest v4 compatibility settings
fengmk2 Sep 16, 2026
66e6efc
fix(migrate): report Vitest review findings once
fengmk2 Sep 16, 2026
376e8aa
refactor(tools): convert vendored Vitest helper to TypeScript
fengmk2 Sep 16, 2026
7d30640
fix(migrate): accept supported whole-major Node engine ranges
fengmk2 Sep 16, 2026
e4fa54e
ci: run vendored Vitest helper directly with Node
fengmk2 Sep 16, 2026
05db20f
fix(migrate): limit Vitest v5 diagnostics to behavior changes
fengmk2 Sep 16, 2026
89eb1d4
fix(ci): run vendored Vitest alignment with tsx
fengmk2 Sep 16, 2026
371f0df
docs: align Vitest v5 RFC with migration behavior
fengmk2 Sep 17, 2026
99bead8
fix(test): preserve browser declaration dependencies and augmentations
fengmk2 Sep 17, 2026
23bf403
fix(test): preserve workspace runner API identity
fengmk2 Sep 17, 2026
336379a
test(ecosystem): add Codiff coverage
fengmk2 Sep 17, 2026
65283a5
perf(test): remove runtime Node version check
fengmk2 Sep 17, 2026
bce966e
perf(test): reduce config startup checks
fengmk2 Sep 17, 2026
cfb6ce8
fix(ci): rebuild Codiff native PTY dependency
fengmk2 Sep 17, 2026
c19350b
fix(ci): patch Vitest 5 ecosystem compatibility
fengmk2 Sep 17, 2026
2075125
docs: align Vitest version and provider guidance
fengmk2 Sep 18, 2026
a63db8d
refactor(test): leave WebDriverIO provider community-managed
fengmk2 Sep 19, 2026
b36a70a
test(ecosystem): cover community WebDriverIO projects
fengmk2 Sep 19, 2026
75ce96f
fix(migrate): enforce WebDriverIO provider v5 minimum
fengmk2 Sep 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .github/actions/clone/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ runs:
ref: ${{ steps.upstream-versions.outputs.ROLLDOWN_VITE_HASH }}
persist-credentials: false

# Match the manifests used by sync-remote when it generated the root lockfile.
# setup-node installs with --frozen-lockfile, so this must run before it.
# The runner's preinstalled Node may not support direct TypeScript execution.
- name: Align vendored Vite's Vitest dependencies
shell: bash
run: npx tsx packages/tools/src/vendored-vitest.ts

# Disable autocrlf to preserve LF line endings on Windows
# This prevents prettier/eslint from failing with "Delete ␍" errors
- name: Configure git for LF line endings
Expand Down
6 changes: 6 additions & 0 deletions .github/scripts/__tests__/upgrade-deps-utils.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,9 @@ test('selects the highest stable version from the supported major', () => {
test('returns undefined when the supported major has no stable release', () => {
expect(findLatestStableVersionForMajor(['4.2.0-beta.1', '5.0.0'], 4)).toBeUndefined();
});

test('keeps Vitest upgrades on v5 after the migration', () => {
expect(
findLatestStableVersionForMajor(['4.1.11', '5.0.0', '5.1.0', '5.2.0-beta.1', '6.0.0'], 5),
).toBe('5.1.0');
});
7 changes: 2 additions & 5 deletions .github/scripts/upgrade-deps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ type PnpmWorkspaceEntry = {
const STABLE_SEMVER_TAG_RE = /^v?\d+\.\d+\.\d+$/;
// Vitest major upgrades can change the bundled API, export shims, and CLI
// behavior. Advance this only after Vite+ has adapted to the new major.
const SUPPORTED_VITEST_MAJOR = 4;
const SUPPORTED_VITEST_MAJOR = 5;

const isFullSha = (s: string): boolean => /^[0-9a-f]{40}$/.test(s);

Expand Down Expand Up @@ -211,18 +211,15 @@ async function updatePnpmWorkspace(versions: PnpmWorkspaceVersions): Promise<voi
let content = fs.readFileSync(filePath, 'utf8');

// oxlint's trailing \n in the pattern disambiguates from oxlint-tsgolint.
// All @vitest/* catalog entries (browser + core direct deps) must stay pinned
// Official @vitest/* catalog entries (browser + core direct deps) stay pinned
// to the same exact version as `vitest` itself, otherwise the catalog drifts
// from VITEST_VERSION.
const vitestExactVersionPackages = [
'@vitest/browser',
'@vitest/browser-playwright',
'@vitest/browser-preview',
'@vitest/browser-webdriverio',
'@vitest/expect',
'@vitest/mocker',
'@vitest/pretty-format',
'@vitest/runner',
'@vitest/snapshot',
'@vitest/spy',
'@vitest/utils',
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -374,10 +374,13 @@ jobs:
include:
- os: namespace-profile-linux-x64-default
target: x86_64-unknown-linux-gnu
test-node: 22.18.0
- os: namespace-profile-mac-default
target: aarch64-apple-darwin
test-node: 24.11.0
- os: namespace-profile-windows-4c-8g
target: x86_64-pc-windows-msvc
test-node: 26.0.0
runs-on: ${{ matrix.os }}
steps:
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
Expand Down Expand Up @@ -452,8 +455,9 @@ jobs:
run: vp check

- name: Run unit tests
run: RUST_BACKTRACE=1 pnpm test:unit
run: vp env exec --node ${{ matrix.test-node }} node packages/cli/dist/bin.js test run
env:
RUST_BACKTRACE: '1'
RUST_MIN_STACK: 8388608

- name: Test global package install (powershell)
Expand Down
45 changes: 44 additions & 1 deletion .github/workflows/e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ jobs:
- name: yaak
node-version: 24
command: |
vp fmt --ignore-path .oxfmtignore
vp fmt
# FIXME: type-aware lint fails with "Invalid tsconfig" without full Rust/wasm bootstrap
vp lint || true
vp test
Expand All @@ -358,6 +358,16 @@ jobs:
vp run test:types
vp test --project nuxt
vp test --project unit
- name: codiff
node-version: 24
timeout: 20
command: |
# Migration skips install scripts. node-pty has no Linux prebuild,
# so build its approved native addon before running the tests.
vp pm rebuild node-pty
vp run build
# The separate Workers integration suite still requires Vitest 4.
vp test run
- name: vite-plus-jest-dom-repro
node-version: 24
command: |
Expand Down Expand Up @@ -418,6 +428,19 @@ jobs:
vp run build && vp run build:demos
vp run lint
vp run test:unit
- name: 10ten-ja-reader
# Match upstream's pin for its locked WebDriverIO/Undici versions.
node-version: 24.15.0
command: |
vp test run --project browser --browser.name=chrome
- name: sqlocal
node-version: 24
command: |
vp test run --browser.name=chrome
- name: brazilian-utils
node-version: 24
command: |
vp test run --browser.enabled --browser.name=chrome --browser.headless
- name: solid-vite-plugin
node-version: 24
# The next branch's Vite 8 example uses Solid 2 and @solidjs/vite-plugin.
Expand Down Expand Up @@ -452,10 +475,24 @@ jobs:
- os: namespace-profile-windows-4c-8g
project:
name: varlet
# Codiff's upstream test job is Ubuntu-only and needs native-keymap system libraries.
- os: namespace-profile-windows-4c-8g
project:
name: codiff
# tiptap upstream CI is ubuntu-only
- os: namespace-profile-windows-4c-8g
project:
name: tiptap
# Match upstream's Linux Chrome jobs for these WebDriverIO suites.
- os: namespace-profile-windows-4c-8g
project:
name: 10ten-ja-reader
- os: namespace-profile-windows-4c-8g
project:
name: sqlocal
- os: namespace-profile-windows-4c-8g
project:
name: brazilian-utils

steps:
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
Expand All @@ -481,6 +518,12 @@ jobs:
name: vite-plus-packages-${{ matrix.os }}
path: tmp/tgz

- name: Install Codiff native-keymap dependencies
if: matrix.project.name == 'codiff'
run: |
sudo apt-get update
sudo apt-get install --yes libx11-dev libxkbfile-dev

- name: Install vp CLI
shell: bash
run: |
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/upgrade-deps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,9 @@ jobs:

### Background
- Upgrade script: `./.github/scripts/upgrade-deps.ts`
- Vitest is intentionally capped at the latest stable `4.x` release until
Vite+ adapts to a newer major. Do not remove or bypass that cap.
- Vitest is capped at the latest stable `5.x` release. Keep the exact
version selected by the upgrade script when merging upstream catalogs.
Official Vitest packages must use that version. Do not bypass the cap.
- Sync-remote tool: `pnpm tool sync-remote` (source in
`packages/tools/src/sync-remote-deps.ts`) — clones rolldown/vite into the
working tree, merges their pnpm-workspace catalogs into the root
Expand All @@ -135,7 +136,7 @@ jobs:
cross-major semver conflict in the merged catalog, e.g.
`Incompatible semver ranges for <pkg>: ^X vs ^Y`. The merger refuses to
auto-resolve cross-major conflicts for packages outside its synced list
(oxc-*, vitest deps). For passthrough deps that vp does NOT import
(oxc-* and tinybench). For passthrough deps that vp does NOT import
directly (e.g. `diff`, `acorn`, `astring`, anything only present in
`rolldown/scripts/package.json` or vite's internals), bump vp's
`pnpm-workspace.yaml` catalog entry to match the rolldown/vite version,
Expand Down
4 changes: 4 additions & 0 deletions .typos.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[default]
# Vitest v4 used this misspelled directory; the migrator must recognize it.
extend-ignore-re = ['\.vitest-attachements\b']

[default.extend-words]
ratatui = "ratatui"
PUNICODE = "PUNICODE"
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ reqwest = { version = "0.13", default-features = false }
rolldown-notify = "10.2.0"
rolldown-notify-debouncer-full = "0.7.5"
rustc-hash = "2.1.1"
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
rustls = { version = "0.23.45", default-features = false, features = ["ring", "std", "tls12"] }
same-file = "1.0.6"
schemars = "1.0.0"
self_cell = "1.2.0"
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ Add package-manager overrides so that other packages use the Vite+ versions. Ali
```json
"overrides": {
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
"vitest": "4.1.11"
"vitest": "5.0.1"
}
```

Expand All @@ -216,15 +216,15 @@ If you are using `pnpm`, add this to your `pnpm-workspace.yaml`:
```yaml
overrides:
vite: npm:@voidzero-dev/vite-plus-core@latest
vitest: 4.1.11
vitest: 5.0.1
```

Or, if you are using Yarn:

```json
"resolutions": {
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
"vitest": "4.1.11"
"vitest": "5.0.1"
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ should add package as dev dependencies
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed
➤ YN0000: · Done in <duration> <duration>
➤ YN0000: · Done in <duration>
```

## `vpt print-file package.json`
Expand Down Expand Up @@ -81,7 +81,7 @@ warn: yarn does not support --allow-build.
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed
➤ YN0000: · Done in <duration> <duration>
➤ YN0000: · Done in <duration>
```

## `vpt print-file package.json`
Expand Down Expand Up @@ -114,7 +114,7 @@ VITE+ - The Unified Toolchain for the Web
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed
➤ YN0000: · Done in <duration> <duration>
➤ YN0000: · Done in <duration>
```

## `vpt print-file package.json`
Expand Down Expand Up @@ -150,7 +150,7 @@ should add package as optional dependencies
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed
➤ YN0000: · Done in <duration> <duration>
➤ YN0000: · Done in <duration>
```

## `vpt print-file package.json`
Expand Down Expand Up @@ -187,7 +187,7 @@ support pass through arguments
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed
➤ YN0000: · Done in <duration> <duration>
➤ YN0000: · Done in <duration>
```

## `vpt print-file package.json`
Expand Down
Loading
Loading