Skip to content

Commit 2521cbc

Browse files
committed
test(e2e): add vite migration e2e
1 parent cc93454 commit 2521cbc

5 files changed

Lines changed: 73 additions & 17 deletions

File tree

.github/workflows/e2e-test.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ on:
77
push:
88
branches:
99
- main
10+
# For testing the e2e test workflow, will be deleted after testing
11+
- 12-22-test_e2e_add_vite_migration_e2e
1012
paths-ignore:
1113
- '**/*.md'
1214

@@ -32,6 +34,9 @@ jobs:
3234

3335
e2e-test:
3436
name: ${{ matrix.project.name }} E2E test
37+
env:
38+
# For packing manager install from github package registry
39+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3540
permissions:
3641
contents: read
3742
packages: read
@@ -50,6 +55,19 @@ jobs:
5055
command: |
5156
pnpm run --filter="@skeletonlabs/*" --filter="!*skeleton.dev" --sequential build
5257
pnpm test
58+
- name: rollipop
59+
node-version: 22
60+
skip-install: true
61+
command: |
62+
vite install -- --refresh-lockfile || true
63+
vite run lint
64+
vite run build:all
65+
vite run typecheck:all
66+
vite run format
67+
vite run @rollipop/common#test
68+
vite run @rollipop/core#test
69+
vite run @rollipop/dev-server#test
70+
5371
steps:
5472
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
5573
- uses: ./.github/actions/clone
@@ -98,6 +116,9 @@ jobs:
98116
working-directory: ecosystem-ci/${{ matrix.project.name }}
99117
run: |
100118
node ../patch-project.ts ${{ matrix.project.name }}
119+
if [ -n "${{ matrix.project.skip-install }}" ]; then
120+
exit 0
121+
fi
101122
pnpm install --no-frozen-lockfile
102123
pnpm playwright install --with-deps
103124

ecosystem-ci/patch-project.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { execSync } from 'node:child_process';
12
import fs from 'node:fs';
23
import { dirname, join } from 'node:path';
34
import { fileURLToPath } from 'node:url';
@@ -208,13 +209,37 @@ peerDependencyRules:
208209
}
209210
}
210211

212+
async function migrateProject(project: string) {
213+
const repoRoot = join(projectDir, project);
214+
// run vite migrate
215+
execSync('vite migrate', {
216+
cwd: repoRoot,
217+
stdio: 'inherit',
218+
env: {
219+
...process.env,
220+
VITE_PLUS_OVERRIDE_PACKAGES: JSON.stringify({
221+
vite: `file:${tgzPath}/voidzero-dev-vite-plus-core-0.0.0.tgz`,
222+
vitest: `file:${tgzPath}/voidzero-dev-vite-plus-test-0.0.0.tgz`,
223+
'@voidzero-dev/vite-plus-core': `file:${tgzPath}/voidzero-dev-vite-plus-core-0.0.0.tgz`,
224+
'@voidzero-dev/vite-plus-test': `file:${tgzPath}/voidzero-dev-vite-plus-test-0.0.0.tgz`,
225+
}),
226+
VITE_PLUS_VERSION: `file:${tgzPath}/voidzero-dev-vite-plus-0.0.0.tgz`,
227+
},
228+
});
229+
// print package.json for debugging
230+
console.log(fs.readFileSync(join(repoRoot, 'package.json'), 'utf8'));
231+
}
232+
211233
switch (project) {
212234
case 'vibe-dashboard':
213235
await patchVibeDashboard();
214236
break;
215237
case 'skeleton':
216238
await patchSkeleton();
217239
break;
240+
case 'rollipop':
241+
await migrateProject(project);
242+
break;
218243
default:
219244
console.error(`Project ${project} is not supported`);
220245
process.exit(1);

ecosystem-ci/repo.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,10 @@
88
"repository": "https://github.com/voidzero-dev/vibe-dashboard.git",
99
"branch": "main",
1010
"hash": "30c68c9ad65c1315abf4c69366b21bc63b5d0fb4"
11+
},
12+
"rollipop": {
13+
"repository": "https://github.com/leegeunhyeok/rollipop.git",
14+
"branch": "main",
15+
"hash": "37095bfa36fa4c8bdf5e48f050aff39b3ffe8cc1"
1116
}
1217
}

packages/global/src/migration/migrator.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,10 @@ import {
2323
detectPackageMetadata,
2424
VITE_PLUS_NAME,
2525
VITE_PLUS_VERSION,
26+
VITE_PLUS_OVERRIDE_PACKAGES,
2627
} from '../utils/index.js';
2728
import { detectConfigs } from './detector.js';
2829

29-
const OVERRIDE_PACKAGES = {
30-
vite: 'npm:@voidzero-dev/vite-plus-core@latest',
31-
vitest: 'npm:@voidzero-dev/vite-plus-test@latest',
32-
} as const;
3330
// packages that are replaced with vite-plus
3431
const REMOVE_PACKAGES = [
3532
'oxlint',
@@ -100,24 +97,24 @@ export function rewriteStandaloneProject(projectPath: string, workspaceInfo: Wor
10097
if (packageManager === PackageManager.yarn) {
10198
pkg.resolutions = {
10299
...pkg.resolutions,
103-
...OVERRIDE_PACKAGES,
100+
...VITE_PLUS_OVERRIDE_PACKAGES,
104101
};
105102
} else if (packageManager === PackageManager.npm) {
106103
pkg.overrides = {
107104
...pkg.overrides,
108-
...OVERRIDE_PACKAGES,
105+
...VITE_PLUS_OVERRIDE_PACKAGES,
109106
};
110107
} else if (packageManager === PackageManager.pnpm) {
111108
pkg.pnpm = {
112109
...pkg.pnpm,
113110
overrides: {
114111
...pkg.pnpm?.overrides,
115-
...OVERRIDE_PACKAGES,
112+
...VITE_PLUS_OVERRIDE_PACKAGES,
116113
},
117114
};
118115
// remove packages from `resolutions` field if they exist
119116
// https://pnpm.io/9.x/package_json#resolutions
120-
for (const key of [...Object.keys(OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
117+
for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
121118
if (pkg.resolutions?.[key]) {
122119
delete pkg.resolutions[key];
123120
}
@@ -215,7 +212,7 @@ function rewritePnpmWorkspaceYaml(projectPath: string): void {
215212
rewriteCatalog(doc);
216213

217214
// overrides
218-
for (const key of Object.keys(OVERRIDE_PACKAGES)) {
215+
for (const key of Object.keys(VITE_PLUS_OVERRIDE_PACKAGES)) {
219216
doc.setIn(['overrides', scalarString(key)], scalarString('catalog:'));
220217
}
221218
// remove dependency selector from vite, e.g. "vite-plugin-svgr>vite": "npm:rolldown-vite@7.0.12"
@@ -235,7 +232,7 @@ function rewritePnpmWorkspaceYaml(projectPath: string): void {
235232
allowAny = new YAMLSeq<Scalar<string>>();
236233
}
237234
const existing = new Set(allowAny.items.map((n) => n.value));
238-
for (const key of Object.keys(OVERRIDE_PACKAGES)) {
235+
for (const key of Object.keys(VITE_PLUS_OVERRIDE_PACKAGES)) {
239236
if (!existing.has(key)) {
240237
allowAny.add(scalarString(key));
241238
}
@@ -250,7 +247,7 @@ function rewritePnpmWorkspaceYaml(projectPath: string): void {
250247
if (!allowedVersions) {
251248
allowedVersions = new YAMLMap<Scalar<string>, Scalar<string>>();
252249
}
253-
for (const key of Object.keys(OVERRIDE_PACKAGES)) {
250+
for (const key of Object.keys(VITE_PLUS_OVERRIDE_PACKAGES)) {
254251
// - vite: '*'
255252
allowedVersions.set(scalarString(key), scalarString('*'));
256253
}
@@ -320,7 +317,7 @@ function rewriteYarnrcYml(projectPath: string): void {
320317
* @param doc - The document to rewrite
321318
*/
322319
function rewriteCatalog(doc: YamlDocument): void {
323-
for (const [key, value] of Object.entries(OVERRIDE_PACKAGES)) {
320+
for (const [key, value] of Object.entries(VITE_PLUS_OVERRIDE_PACKAGES)) {
324321
doc.setIn(['catalog', key], scalarString(value));
325322
}
326323
doc.setIn(['catalog', VITE_PLUS_NAME], scalarString(VITE_PLUS_VERSION));
@@ -357,19 +354,19 @@ function rewriteRootWorkspacePackageJson(
357354
...pkg.resolutions,
358355
// FIXME: yarn don't support catalog on resolutions
359356
// https://github.com/yarnpkg/berry/issues/6979
360-
...OVERRIDE_PACKAGES,
357+
...VITE_PLUS_OVERRIDE_PACKAGES,
361358
};
362359
} else if (packageManager === PackageManager.npm) {
363360
pkg.overrides = {
364361
...pkg.overrides,
365-
...OVERRIDE_PACKAGES,
362+
...VITE_PLUS_OVERRIDE_PACKAGES,
366363
};
367364
} else if (packageManager === PackageManager.pnpm) {
368365
// pnpm use overrides field at pnpm-workspace.yaml
369366
// so we don't need to set overrides field at package.json
370367
// remove packages from `resolutions` field and `pnpm.overrides` field if they exist
371368
// https://pnpm.io/9.x/package_json#resolutions
372-
for (const key of [...Object.keys(OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
369+
for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
373370
if (pkg.pnpm?.overrides?.[key]) {
374371
delete pkg.pnpm.overrides[key];
375372
}
@@ -434,7 +431,7 @@ export function rewritePackageJson(
434431
}
435432
const supportCatalog = isMonorepo && packageManager !== PackageManager.npm;
436433
let needVitePlus = false;
437-
for (const [key, version] of Object.entries(OVERRIDE_PACKAGES)) {
434+
for (const [key, version] of Object.entries(VITE_PLUS_OVERRIDE_PACKAGES)) {
438435
const value = supportCatalog ? 'catalog:' : version;
439436
if (pkg.devDependencies?.[key]) {
440437
pkg.devDependencies[key] = value;
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,10 @@
11
export const VITE_PLUS_NAME = '@voidzero-dev/vite-plus';
2-
export const VITE_PLUS_VERSION = 'latest';
2+
export const VITE_PLUS_VERSION = process.env.VITE_PLUS_VERSION || 'latest';
3+
4+
export const VITE_PLUS_OVERRIDE_PACKAGES: Record<string, string> = process.env
5+
.VITE_PLUS_OVERRIDE_PACKAGES
6+
? JSON.parse(process.env.VITE_PLUS_OVERRIDE_PACKAGES)
7+
: {
8+
vite: 'npm:@voidzero-dev/vite-plus-core@latest',
9+
vitest: 'npm:@voidzero-dev/vite-plus-test@latest',
10+
};

0 commit comments

Comments
 (0)