Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
b662966
docs(rfc): vp migrate upgrade path for existing Vite+ projects
fengmk2 Jun 10, 2026
8998baf
docs(rfc): cover real 0.1.24->0.2.0 upgrade failure in vp migrate
fengmk2 Jun 18, 2026
94aa32f
docs(rfc): align vp migrate upgrade with the v0.2.1 prompt spec
fengmk2 Jun 18, 2026
3d30ccc
fix(migrate): make vp migrate upgrade v0.1.x projects to v0.2.x
fengmk2 Jun 18, 2026
8eb837d
feat(migrate): manage vitest only when the project uses it directly
fengmk2 Jun 18, 2026
e82435a
feat(migrate): align the full @vitest/* ecosystem to the bundled vitest
fengmk2 Jun 19, 2026
26968b3
docs(rfc): revise migrate RFC for vitest provisioning and ecosystem r…
fengmk2 Jun 19, 2026
f2b0fda
fix(migrate): make upgrade provisioning peer-safe
fengmk2 Jun 19, 2026
744e9d8
fix(migrate): validate upgrade scenarios in snapshots
fengmk2 Jun 19, 2026
c8b175b
test(migrate): update default vitest snapshots
fengmk2 Jun 21, 2026
15ca945
fix(migrate): handle peer and override edge cases
fengmk2 Jun 21, 2026
04c57a6
fix(migrate): cover remaining vitest upgrade cases
fengmk2 Jun 21, 2026
f443a5b
fix(test): normalize snapshot file endings
fengmk2 Jun 21, 2026
4e3e6e1
test(migrate): sync idempotency snapshots
fengmk2 Jun 21, 2026
bfc958b
test(create): update standalone Yarn catalog snapshot
fengmk2 Jun 21, 2026
e282708
fix(migrate): preserve vitest imports for Nuxt tests
fengmk2 Jun 23, 2026
774bc8f
test(ecosystem-ci): update npmx.dev fixture
fengmk2 Jun 23, 2026
461bbc6
test(cli): stabilize Nuxt lint snapshot
fengmk2 Jun 23, 2026
92c88a0
fix(migrate): preserve Vitest across Nuxt packages
fengmk2 Jun 23, 2026
3606535
fix(migrate): convert Yarn PnP projects
fengmk2 Jun 23, 2026
b2b6d6e
test(ecosystem): install Playwright for npmx.dev
fengmk2 Jun 23, 2026
b814002
test(migrate): cover conservative monorepo retention
fengmk2 Jun 23, 2026
d7ea7f9
fix(migrate): pin pkg.pr.new targets in test helper
fengmk2 Jun 23, 2026
63a0861
fix(test): keep pkg.pr.new overrides minimal
fengmk2 Jun 23, 2026
d199e90
fix(migrate): allow pkg.pr.new pnpm subdependencies
fengmk2 Jun 23, 2026
9f245c9
fix(test): refresh mutable pkg.pr.new installs
fengmk2 Jun 24, 2026
4a0bac7
fix(migrate): preserve Vitest ecosystem catalogs
fengmk2 Jun 24, 2026
c88d00d
fix(migrate): pin vite-plus toolchain versions
fengmk2 Jun 24, 2026
23832e1
fix(test): reuse unchanged pkg.pr.new install
fengmk2 Jun 24, 2026
26343f3
fix(test): run pkg.pr.new migration from project root
fengmk2 Jun 24, 2026
cbc03da
fix(migrate): isolate config compatibility checks
fengmk2 Jun 24, 2026
3292590
fix(test): pin pkg.pr.new migration builds by commit
fengmk2 Jun 24, 2026
a593aa3
fix(migrate): move pnpm settings to workspace config
fengmk2 Jun 25, 2026
94937cd
docs(migrate): document user-facing migration rules
fengmk2 Jun 25, 2026
27034b4
test(migrate): update migration snapshots
fengmk2 Jun 25, 2026
ed11ef3
docs(migrate): clarify pnpm vite dependency rule
fengmk2 Jun 25, 2026
bea36b2
fix(migrate): format projects after migration
fengmk2 Jun 25, 2026
a960740
fix(migrate): preserve unmigrated Prettier projects
fengmk2 Jun 25, 2026
98fa5c8
fix(migrate): detect legacy browser providers
fengmk2 Jun 25, 2026
18a6a56
fix(ci): upgrade affected pnpm 11 versions for pkg.pr.new tests
fengmk2 Jun 26, 2026
d71857e
fix(migrate): preserve Bun config arrays
fengmk2 Jun 26, 2026
b579b81
fix(migrate): avoid Bun peer suppression
fengmk2 Jun 26, 2026
2a9225a
fix(ci): support Bun pkg.pr.new migration tests
fengmk2 Jun 26, 2026
aa5a0c7
fix(ci): satisfy lint in Bun pkg helper
fengmk2 Jun 26, 2026
3ff95bb
fix(migrate): rewrite tools invoked through bunx
fengmk2 Jun 26, 2026
95ea87f
fix(migrate): limit automatic formatting to changed files
fengmk2 Jun 26, 2026
1194a1d
fix(migrate): defer supported formats to oxfmt
fengmk2 Jun 26, 2026
c8432dc
fix(ci): upgrade affected pnpm 10 pkg-pr-new tests
fengmk2 Jun 26, 2026
fa32021
fix(migrate): address review feedback
fengmk2 Jun 26, 2026
b3f6c55
fix(migrate): preserve pnpm catalog layouts
fengmk2 Jun 26, 2026
7da35ef
test(migrate): use release version for default catalog
fengmk2 Jun 26, 2026
bd63c0d
fix(migrate): address remaining review feedback
fengmk2 Jun 27, 2026
c70b63c
fix(migrate): address upgrade-path review findings
fengmk2 Jun 27, 2026
19f44cc
ci(migrate): verify pkg.pr.new builds through the registry bridge
fengmk2 Jun 27, 2026
1cde19e
chore(migrate): fix oxfmt formatting and refresh global migration snaps
fengmk2 Jun 27, 2026
d13148f
ci(migrate): persist bridge registry into project .npmrc and .yarnrc.yml
fengmk2 Jun 27, 2026
7d73cd9
fix(migrate): do not duplicate vite-plus into devDependencies
fengmk2 Jun 27, 2026
094397c
refactor(migrate): split migrator.ts into category modules
fengmk2 Jun 27, 2026
64b580a
docs(agents): point to the migrator/ structure guide
fengmk2 Jun 27, 2026
089f609
chore(skills): add test-pkg-pr-new-migrate skill
fengmk2 Jun 27, 2026
f359808
fix(migrate): normalize protocol-pinned vite-plus under force-override
fengmk2 Jun 27, 2026
142e5e9
fix(migrate): address PR review feedback
fengmk2 Jun 27, 2026
87b376d
test(migrate): drop pkg.pr.new force-override in favor of the bridge
fengmk2 Jun 27, 2026
d83d6fd
test: regenerate command-upgrade-check for the bounded normalizer
fengmk2 Jun 27, 2026
a1f7495
ci(pkg-pr-new): comment the bridge version on the PR after registration
fengmk2 Jun 27, 2026
b06c350
style: run oxfmt on bridge-comment-template.md
fengmk2 Jun 27, 2026
0e26437
refactor(migrate): group Rolldown compat files under compat/
fengmk2 Jun 27, 2026
c0970dc
fix(migrate): preserve the bunx --bun flag when rewriting to vp
fengmk2 Jun 27, 2026
823decd
fix(migrate): clear the progress spinner before the upgrade prompts
fengmk2 Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .claude/skills/test-pkg-pr-new-migrate/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
name: test-pkg-pr-new-migrate
description: Verify a pkg.pr.new build of vite-plus against a real project before release — run `vp migrate` from the pkg.pr.new commit against a local project, deps resolved through the registry bridge. Use when asked to verify/e2e-test a pkg.pr.new build against a project, "test PR #<N> on <project>", or check a prerelease against a repo.
allowed-tools: Bash, Read
---

# Verify a pkg.pr.new build against one project

Installs an isolated global `vp` from a pkg.pr.new commit and runs `vp migrate` on a specified local project. The result pins `vite-plus`/`vite` to `0.0.0-commit.<sha>` resolved through the registry bridge, persisted into the project's `.npmrc` (and `.yarnrc.yml` for Yarn Berry) so the project's own CI installs the build too.

Required inputs: a `<PR-or-SHA>` (the pkg.pr.new build to verify) and a `<project-path>`. If either is missing from the request, **ask the user** for it — never guess the PR/SHA, as the build under test is the user's choice.

```bash
.github/scripts/test-pkg-pr-new-migrate.sh <PR-or-SHA> <project-path> [migrate-options...]
# e.g.
.github/scripts/test-pkg-pr-new-migrate.sh 1891 /path/to/npmx.dev --no-interactive
```

- First arg is a PR number or commit SHA; the script resolves the immutable commit and verifies the bridge serves it (the pkg.pr.new publish workflow registers each commit).
- Never touches `~/.vite-plus`; refuses a dirty worktree unless `ALLOW_DIRTY=1`; prints the project's `git status`/`diff` at the end — inspect that to confirm the migration result.

Then confirm the resolved versions (`-r` across workspaces for monorepos):

```bash
cd <project-path>
vp why -r vite-plus vite vitest
```

Each must resolve to exactly ONE version: `vite-plus` and `vite` at the expected `0.0.0-commit.<sha>` (vite via the `@voidzero-dev/vite-plus-core` alias), `vitest` at the bundled upstream version. Multiple versions, or a stale/wrong version, means the migration or install is broken.
28 changes: 28 additions & 0 deletions .github/bridge-comment-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<!-- pkg-pr-bridge-version -->

### Registry bridge build (`__SHORT__`)

This commit is published to pkg.pr.new and registered with the [registry bridge](https://github.com/fengmk2/pkg-pr-registry-bridge), which serves these as ordinary npm versions (every other package proxies to npmjs):

| Package | Version |
| ------------------------------ | ---------------------- |
| `vite-plus` | `0.0.0-commit.__SHA__` |
| `@voidzero-dev/vite-plus-core` | `0.0.0-commit.__SHA__` |

**Point your package manager at the bridge registry** `https://pkg-pr-registry-bridge.render.vip/`:

| Package manager | Registry config |
| ---------------- | -------------------------------------------------------------------------------- |
| npm / pnpm / Bun | `.npmrc`: `registry=https://pkg-pr-registry-bridge.render.vip/` |
| Yarn (v2+) | `.yarnrc.yml`: `npmRegistryServer: "https://pkg-pr-registry-bridge.render.vip/"` |

Then pin the build (`vite` aliases to vite-plus-core; pnpm can use a catalog, npm an `overrides` entry):

```json
{
"devDependencies": {
"vite-plus": "0.0.0-commit.__SHA__",
"vite": "npm:@voidzero-dev/vite-plus-core@0.0.0-commit.__SHA__"
}
}
```
328 changes: 328 additions & 0 deletions .github/scripts/test-pkg-pr-new-migrate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,328 @@
#!/usr/bin/env bash

set -euo pipefail

usage() {
cat <<'EOF'
Usage: .github/scripts/test-pkg-pr-new-migrate.sh <PR-or-SHA> <project-path> [migrate-options...]

Installs an isolated global Vite+ CLI built from a pkg.pr.new commit and runs
`vp migrate` against a local project. The migrated project pins `vite-plus` and
`vite` to the matching commit build, resolved through the pkg.pr.new registry
bridge (https://github.com/fengmk2/pkg-pr-registry-bridge) so they install like
ordinary npm versions (0.0.0-commit.<sha>) instead of mutable pkg.pr.new URLs.

Persists the bridge registry into the project's `.npmrc` (npm/pnpm/Yarn
Classic/Bun) and, for Yarn Berry projects, `.yarnrc.yml`, so the migrated
project resolves the commit versions both during this run and in its own CI.

Examples:
.github/scripts/test-pkg-pr-new-migrate.sh 1891 /path/to/npmx.dev
.github/scripts/test-pkg-pr-new-migrate.sh 4eb2104c /path/to/project --no-interactive

Environment variables:
VP_PKG_PR_NEW_HOME Override the isolated global CLI installation directory.
ALLOW_DIRTY=1 Allow migration in a dirty Git worktree.
EOF
}

if [ "$#" -lt 2 ]; then
usage >&2
exit 2
fi

pr_ref="$1"
project_input="$2"
shift 2

case "$pr_ref" in
'' | *[![:alnum:]._-]*)
echo "error: PR or SHA contains unsupported characters: $pr_ref" >&2
exit 2
;;
esac

if [ ! -d "$project_input" ]; then
echo "error: project directory does not exist: $project_input" >&2
exit 2
fi

project_dir="$(cd "$project_input" && pwd -P)"
if [ ! -f "$project_dir/package.json" ]; then
echo "error: package.json not found in project: $project_dir" >&2
exit 2
fi

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
repo_root="$(cd "$script_dir/../.." && pwd -P)"
installer="$repo_root/packages/cli/install.sh"

if [ ! -f "$installer" ]; then
echo "error: Vite+ installer not found: $installer" >&2
exit 2
fi

is_git_repo=0
if command -v git >/dev/null 2>&1 && git -C "$project_dir" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
is_git_repo=1
if [ "${ALLOW_DIRTY:-0}" != "1" ] && [ -n "$(git -C "$project_dir" status --porcelain)" ]; then
echo "error: project worktree is dirty: $project_dir" >&2
echo "Commit or stash its changes, or rerun with ALLOW_DIRTY=1." >&2
exit 2
fi
fi

bridge_registry="https://pkg-pr-registry-bridge.render.vip/"
pkg_pr_new_base="https://pkg.pr.new/voidzero-dev/vite-plus"
requested_vite_plus_spec="$pkg_pr_new_base@$pr_ref"

# pkg.pr.new commit builds are immutable; PR-number URLs are mutable and the
# registry bridge only mirrors commit builds. Resolve the requested PR or SHA to
# its underlying 40-char commit so the global install and every dependency spec
# share one immutable key.
resolve_pkg_pr_new_commit() {
curl -fsSIL "$requested_vite_plus_spec" | tr -d '\r' | awk -F ': ' '
tolower($1) == "x-commit-key" {
count = split($2, parts, ":")
print parts[count]
exit
}
'
}

available_commit="$(resolve_pkg_pr_new_commit || true)"
case "$available_commit" in
'' | *[!0-9a-fA-F]*)
echo "error: could not resolve an immutable pkg.pr.new commit for $pr_ref" >&2
exit 1
;;
esac
if [ "${#available_commit}" -ne 40 ]; then
echo "error: pkg.pr.new returned an invalid commit for $pr_ref: $available_commit" >&2
exit 1
fi

resolved_ref="$available_commit"
commit_version="0.0.0-commit.$resolved_ref"
vite_core_spec="npm:@voidzero-dev/vite-plus-core@$commit_version"

# The bridge only serves commit builds it has been told about (registered by the
# pkg.pr.new publish workflow). Fail early with an actionable message instead of
# letting the project install hit an opaque registry miss.
if ! curl -fsS "${bridge_registry}@voidzero-dev/vite-plus-core" 2>/dev/null |
grep -q "0.0.0-commit.$resolved_ref"; then
echo "error: the registry bridge has no build for commit $resolved_ref" >&2
echo "Ensure the pkg.pr.new publish workflow registered it, or register it manually:" >&2
echo " curl -fsS -X POST -H \"authorization: Bearer \$PKG_PR_BRIDGE_ADMIN_TOKEN\" \\" >&2
echo " -H 'content-type: application/json' -d '{\"ref\":\"commit.$resolved_ref\"}' \\" >&2
echo " ${bridge_registry}-/refs" >&2
exit 1
fi

original_home="$HOME"
cache_root="${XDG_CACHE_HOME:-$original_home/.cache}"
pr_home="${VP_PKG_PR_NEW_HOME:-$cache_root/vite-plus/pkg-pr-new/$pr_ref}"
installer_home="$(mktemp -d "${TMPDIR:-/tmp}/vite-plus-pr-installer.XXXXXX")"

cached_version_dir="$pr_home/pkg-pr-new-$resolved_ref"
vp_bin="$pr_home/bin/vp"
vite_plus_package_json="$pr_home/current/node_modules/vite-plus/package.json"
global_cli_entry="$pr_home/current/node_modules/vite-plus/dist/bin.js"
commit_marker="$cached_version_dir/.pkg-pr-new-commit"

read_installed_commit() {
if [ -f "$commit_marker" ]; then
head -n 1 "$commit_marker"
return
fi

if [ -f "$vite_plus_package_json" ]; then
awk -F '"' '
$2 == "@voidzero-dev/vite-plus-core" {
value = $4
sub(/^.*@/, "", value)
print value
exit
}
' "$vite_plus_package_json"
fi
}

installed_commit="$(read_installed_commit || true)"
current_target="$(readlink "$pr_home/current" 2>/dev/null || true)"
reuse_install=0

if [ "$installed_commit" = "$resolved_ref" ] &&
[ "$current_target" = "pkg-pr-new-$resolved_ref" ] &&
[ -x "$vp_bin" ] &&
[ -f "$vite_plus_package_json" ] &&
[ -f "$global_cli_entry" ]; then
reuse_install=1
fi

cleanup() {
rm -rf "$installer_home"
}
trap cleanup EXIT

if [ "$reuse_install" -eq 1 ]; then
printf '%s\n' "$resolved_ref" > "$commit_marker"
echo "Reusing installed Vite+ pkg.pr.new build $resolved_ref (requested $pr_ref) from $pr_home"
else
if [ -n "$installed_commit" ] && [ "$installed_commit" != "$resolved_ref" ]; then
echo "pkg.pr.new build changed: $installed_commit -> $resolved_ref"
elif [ -n "$installed_commit" ]; then
echo "Reinstalling pkg.pr.new build $resolved_ref with an immutable cache key"
fi

# This helper owns a dedicated VP_HOME for each requested PR/ref. Remember
# the previous immutable install so it can be removed only after the new one
# succeeds, while retaining shared runtime and package-manager caches.
previous_target=""
if [ -n "$current_target" ] && [ "$current_target" != "pkg-pr-new-$resolved_ref" ]; then
case "$current_target" in
pkg-pr-new-*) previous_target="$current_target" ;;
esac
fi

# The global CLI ships per-platform binaries that the bridge cannot serve
# through npm's tarball path, so install it straight from pkg.pr.new by its
# immutable commit.
echo "Installing Vite+ pkg.pr.new build $resolved_ref (requested $pr_ref) into $pr_home"
HOME="$installer_home" \
VP_HOME="$pr_home" \
VP_PR_VERSION="$resolved_ref" \
VP_NODE_MANAGER=no \
bash "$installer"

if [ -n "$previous_target" ]; then
rm -rf "$pr_home/$previous_target"
fi
printf '%s\n' "$resolved_ref" > "$commit_marker"
fi

if [ ! -x "$vp_bin" ]; then
echo "error: installed vp executable not found: $vp_bin" >&2
exit 1
fi

if [ ! -f "$vite_plus_package_json" ]; then
echo "error: installed vite-plus package not found: $vite_plus_package_json" >&2
exit 1
fi

if [ ! -f "$global_cli_entry" ]; then
echo "error: installed Vite+ CLI entry not found: $global_cli_entry" >&2
exit 1
fi

vitest_version="$(awk -F '"' '$2 == "vitest" { print $4; exit }' "$vite_plus_package_json")"
if [ -z "$vitest_version" ]; then
echo "error: could not determine the bundled Vitest version from $vite_plus_package_json" >&2
exit 1
fi

export VP_HOME="$pr_home"
export PATH="$VP_HOME/bin:$PATH"
# vite-plus and vite (-> vite-plus-core) become ordinary npm versions resolved
# through the bridge, so the normal upgrade path re-pins them (no force-override
# needed). The values are constrained (commit SHA, semver) so the override JSON
# needs no escaping.
export VP_VERSION="$commit_version"
export VP_OVERRIDE_PACKAGES="{\"vite\":\"$vite_core_spec\",\"vitest\":\"$vitest_version\"}"
# Point every package manager at the registry bridge. It serves the vite-plus /
# vite-plus-core / per-platform CLI commit builds and proxies everything else to
# npmjs, so the project resolves the commit versions like any released package.
# Yarn Berry only honors YARN_NPM_REGISTRY_SERVER; Bun honors npm_config_registry.
export npm_config_registry="$bridge_registry"
export YARN_NPM_REGISTRY_SERVER="$bridge_registry"

# Persist the bridge registry into the project's own config files so the
# migrated project installs the commit builds in ITS OWN CI too, not just during
# this run (the env vars above are not persisted). pnpm in particular resolves
# from .npmrc, not npm_config_registry, and without this fetches the commit
# version from registry.npmjs.org and fails with ERR_PNPM_NO_MATCHING_VERSION.
registry_marker="# pkg.pr.new registry bridge (added by test-pkg-pr-new-migrate.sh)"

# .npmrc is read by npm, pnpm, Yarn Classic and Bun.
project_npmrc="$project_dir/.npmrc"
if ! grep -qsF "$registry_marker" "$project_npmrc"; then
if [ -s "$project_npmrc" ]; then
printf '\n' >> "$project_npmrc"
fi
printf '%s\nregistry=%s\n' "$registry_marker" "$bridge_registry" >> "$project_npmrc"
fi

# Yarn Berry ignores .npmrc and reads .yarnrc.yml instead. The migration's own
# .yarnrc.yml rewrite preserves unrelated keys, so npmRegistryServer survives.
project_yarnrc="$project_dir/.yarnrc.yml"
is_yarn_berry=0
if [ -f "$project_yarnrc" ] ||
{ [ -f "$project_dir/yarn.lock" ] && grep -q '^__metadata:' "$project_dir/yarn.lock" 2>/dev/null; } ||
grep -qE '"packageManager"[[:space:]]*:[[:space:]]*"yarn@([2-9]|[1-9][0-9])' "$project_dir/package.json" 2>/dev/null; then
is_yarn_berry=1
fi
if [ "$is_yarn_berry" -eq 1 ]; then
if grep -qsE '^npmRegistryServer:' "$project_yarnrc"; then
# Override an existing default-registry setting in place.
sed -i.pkg-pr-new.bak -E \
"s|^npmRegistryServer:.*|npmRegistryServer: \"$bridge_registry\"|" "$project_yarnrc"
rm -f "$project_yarnrc.pkg-pr-new.bak"
elif ! grep -qsF "$registry_marker" "$project_yarnrc"; then
if [ -s "$project_yarnrc" ]; then
printf '\n' >> "$project_yarnrc"
fi
printf '%s\nnpmRegistryServer: "%s"\n' "$registry_marker" "$bridge_registry" >> "$project_yarnrc"
fi
fi

hash -r

echo
echo "Using isolated global CLI:"
echo " requested ref: $pr_ref"
echo " resolved commit: $resolved_ref"
echo " executable: $vp_bin"
echo " installation: $(readlink "$pr_home/current" 2>/dev/null || echo unknown)"
echo " registry bridge: $bridge_registry"
echo " project .npmrc: $project_npmrc"
echo " vite-plus spec: $commit_version"
echo " vite spec: $vite_core_spec"
"$vp_bin" --version

# Resolve the preview CLI's own managed Node, independent of the target
# project's pin. Probe from the isolated VP_HOME (no project .node-version) so
# we get the global default rather than the project's. A project pinned to an
# old/unsupported Node would otherwise fail to launch the preview dist/bin.js,
# even though the isolated CLI ships a compatible runtime.
cli_node_version="$(cd "$pr_home" && "$vp_bin" --version 2>/dev/null \
| sed -nE 's/.*Node\.js[[:space:]]+v?([0-9]+\.[0-9]+\.[0-9]+).*/\1/p' | head -1)"
echo " cli node: ${cli_node_version:-unknown}"

echo
echo "Running vp migrate in $project_dir"
set +e
(
# Run the installed JS entry directly so a project-local vite-plus at the
# same semver cannot take precedence. Keep cwd at the project root because
# project config and plugins may resolve dependencies from process.cwd().
# Pin the CLI's own Node (via `env exec --node`) so the project's pinned Node
# version cannot block dist/bin.js from starting.
cd "$project_dir"
if [ -n "$cli_node_version" ]; then
"$vp_bin" env exec --node "$cli_node_version" node "$global_cli_entry" migrate "$project_dir" "$@"
else
"$vp_bin" node "$global_cli_entry" migrate "$project_dir" "$@"
fi
)
migrate_status=$?
set -e

if [ "$is_git_repo" -eq 1 ]; then
echo
echo "Migration worktree changes:"
git -C "$project_dir" status --short
git -C "$project_dir" diff --stat
fi

exit "$migrate_status"
1 change: 1 addition & 0 deletions .github/workflows/e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ jobs:
# on vi.fn() calls — migration sets rule as "error" in config, --allow can't override
vp run lint || true
vp run test:types
vp test --project nuxt
vp test --project unit
- name: vite-plus-jest-dom-repro
node-version: 24
Expand Down
Loading
Loading