Skip to content

Commit 217c24b

Browse files
committed
fix(e2e): update pnpm-workspace.yaml overrides for forceFreshMigration projects
Projects using pnpm catalogs (vinext, viteplus-ws-repro) have `overrides: { vite: "catalog:" }` which takes precedence over the tgz paths that vp migrate injects. This causes install failures because vite-plus@0.0.0 depends on @voidzero-dev/vite-plus-test@0.0.0 which doesn't exist on npm. Fix: for forceFreshMigration projects, use the yaml package to update pnpm-workspace.yaml overrides to point directly to tgz files for all vite-plus packages. pnpm overrides take precedence over catalog entries.
1 parent 958ca8d commit 217c24b

3 files changed

Lines changed: 40 additions & 5 deletions

File tree

ecosystem-ci/patch-project.ts

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { execSync } from 'node:child_process';
2+
import { existsSync } from 'node:fs';
23
import { readFile, writeFile } from 'node:fs/promises';
34
import { join } from 'node:path';
45

6+
import YAML from 'yaml';
7+
58
import { ecosystemCiDir, tgzDir } from './paths.ts';
69
import repos from './repo.json' with { type: 'json' };
710

@@ -21,6 +24,14 @@ const cwd = directory ? join(repoRoot, directory) : repoRoot;
2124
// run vp migrate
2225
const cli = process.env.VITE_PLUS_CLI_BIN ?? 'vp';
2326

27+
const tgzPaths = {
28+
vite: `file:${tgzDir}/voidzero-dev-vite-plus-core-0.0.0.tgz`,
29+
vitest: `file:${tgzDir}/voidzero-dev-vite-plus-test-0.0.0.tgz`,
30+
'vite-plus': `file:${tgzDir}/vite-plus-0.0.0.tgz`,
31+
'@voidzero-dev/vite-plus-core': `file:${tgzDir}/voidzero-dev-vite-plus-core-0.0.0.tgz`,
32+
'@voidzero-dev/vite-plus-test': `file:${tgzDir}/voidzero-dev-vite-plus-test-0.0.0.tgz`,
33+
};
34+
2435
// Projects that already have vite-plus need it removed before migration so
2536
// vp migrate treats them as fresh and applies tgz overrides. Without this,
2637
// vp migrate detects "already using Vite+" and skips override injection.
@@ -31,6 +42,26 @@ if (forceFreshMigration) {
3142
delete pkg.devDependencies?.['vite-plus'];
3243
delete pkg.dependencies?.['vite-plus'];
3344
await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
45+
46+
// Update pnpm-workspace.yaml overrides to redirect vite-plus packages to tgz files.
47+
// Projects using pnpm catalogs (e.g. vinext) have entries like:
48+
// catalog: { vite: "npm:@voidzero-dev/vite-plus-core@...", ... }
49+
// overrides: { vite: "catalog:", vitest: "catalog:" }
50+
// Catalog doesn't support file: protocol, so we set overrides directly to tgz
51+
// paths. pnpm overrides take precedence over catalog entries.
52+
const workspaceYamlPath = join(cwd, 'pnpm-workspace.yaml');
53+
if (existsSync(workspaceYamlPath)) {
54+
const doc = YAML.parseDocument(await readFile(workspaceYamlPath, 'utf-8'));
55+
let overrides = doc.get('overrides') as YAML.YAMLMap | undefined;
56+
if (!overrides) {
57+
overrides = new YAML.YAMLMap();
58+
doc.set('overrides', overrides);
59+
}
60+
for (const [name, value] of Object.entries(tgzPaths)) {
61+
overrides.set(name, value);
62+
}
63+
await writeFile(workspaceYamlPath, doc.toString(), 'utf-8');
64+
}
3465
}
3566

3667
if (project === 'rollipop') {
@@ -48,11 +79,11 @@ execSync(`${cli} migrate --no-agent --no-interactive`, {
4879
env: {
4980
...process.env,
5081
VITE_PLUS_OVERRIDE_PACKAGES: JSON.stringify({
51-
vite: `file:${tgzDir}/voidzero-dev-vite-plus-core-0.0.0.tgz`,
52-
vitest: `file:${tgzDir}/voidzero-dev-vite-plus-test-0.0.0.tgz`,
53-
'@voidzero-dev/vite-plus-core': `file:${tgzDir}/voidzero-dev-vite-plus-core-0.0.0.tgz`,
54-
'@voidzero-dev/vite-plus-test': `file:${tgzDir}/voidzero-dev-vite-plus-test-0.0.0.tgz`,
82+
vite: tgzPaths.vite,
83+
vitest: tgzPaths.vitest,
84+
'@voidzero-dev/vite-plus-core': tgzPaths['@voidzero-dev/vite-plus-core'],
85+
'@voidzero-dev/vite-plus-test': tgzPaths['@voidzero-dev/vite-plus-test'],
5586
}),
56-
VITE_PLUS_VERSION: `file:${tgzDir}/vite-plus-0.0.0.tgz`,
87+
VITE_PLUS_VERSION: tgzPaths['vite-plus'],
5788
},
5889
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"vite": "catalog:",
3535
"vite-plus": "workspace:*",
3636
"vitest": "catalog:",
37+
"yaml": "catalog:",
3738
"zod": "catalog:"
3839
},
3940
"lint-staged": {

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)