Skip to content

Commit 8e2fbe1

Browse files
committed
test(e2e): add vite migration e2e
1 parent 30704fc commit 8e2fbe1

6 files changed

Lines changed: 73 additions & 18 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 --no-frozen-lockfile || true
63+
vite run lint || true
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/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
vibe-dashboard
2-
skeleton
2+
skeleton
3+
rollipop

ecosystem-ci/patch-project.ts

Lines changed: 23 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,35 @@ 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+
}
230+
211231
switch (project) {
212232
case 'vibe-dashboard':
213233
await patchVibeDashboard();
214234
break;
215235
case 'skeleton':
216236
await patchSkeleton();
217237
break;
238+
case 'rollipop':
239+
await migrateProject(project);
240+
break;
218241
default:
219242
console.error(`Project ${project} is not supported`);
220243
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',
@@ -101,24 +98,24 @@ export function rewriteStandaloneProject(projectPath: string, workspaceInfo: Wor
10198
if (packageManager === PackageManager.yarn) {
10299
pkg.resolutions = {
103100
...pkg.resolutions,
104-
...OVERRIDE_PACKAGES,
101+
...VITE_PLUS_OVERRIDE_PACKAGES,
105102
};
106103
} else if (packageManager === PackageManager.npm) {
107104
pkg.overrides = {
108105
...pkg.overrides,
109-
...OVERRIDE_PACKAGES,
106+
...VITE_PLUS_OVERRIDE_PACKAGES,
110107
};
111108
} else if (packageManager === PackageManager.pnpm) {
112109
pkg.pnpm = {
113110
...pkg.pnpm,
114111
overrides: {
115112
...pkg.pnpm?.overrides,
116-
...OVERRIDE_PACKAGES,
113+
...VITE_PLUS_OVERRIDE_PACKAGES,
117114
},
118115
};
119116
// remove packages from `resolutions` field if they exist
120117
// https://pnpm.io/9.x/package_json#resolutions
121-
for (const key of [...Object.keys(OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
118+
for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
122119
if (pkg.resolutions?.[key]) {
123120
delete pkg.resolutions[key];
124121
}
@@ -219,7 +216,7 @@ function rewritePnpmWorkspaceYaml(projectPath: string): void {
219216
rewriteCatalog(doc);
220217

221218
// overrides
222-
for (const key of Object.keys(OVERRIDE_PACKAGES)) {
219+
for (const key of Object.keys(VITE_PLUS_OVERRIDE_PACKAGES)) {
223220
doc.setIn(['overrides', scalarString(key)], scalarString('catalog:'));
224221
}
225222
// remove dependency selector from vite, e.g. "vite-plugin-svgr>vite": "npm:rolldown-vite@7.0.12"
@@ -239,7 +236,7 @@ function rewritePnpmWorkspaceYaml(projectPath: string): void {
239236
allowAny = new YAMLSeq<Scalar<string>>();
240237
}
241238
const existing = new Set(allowAny.items.map((n) => n.value));
242-
for (const key of Object.keys(OVERRIDE_PACKAGES)) {
239+
for (const key of Object.keys(VITE_PLUS_OVERRIDE_PACKAGES)) {
243240
if (!existing.has(key)) {
244241
allowAny.add(scalarString(key));
245242
}
@@ -254,7 +251,7 @@ function rewritePnpmWorkspaceYaml(projectPath: string): void {
254251
if (!allowedVersions) {
255252
allowedVersions = new YAMLMap<Scalar<string>, Scalar<string>>();
256253
}
257-
for (const key of Object.keys(OVERRIDE_PACKAGES)) {
254+
for (const key of Object.keys(VITE_PLUS_OVERRIDE_PACKAGES)) {
258255
// - vite: '*'
259256
allowedVersions.set(scalarString(key), scalarString('*'));
260257
}
@@ -324,7 +321,7 @@ function rewriteYarnrcYml(projectPath: string): void {
324321
* @param doc - The document to rewrite
325322
*/
326323
function rewriteCatalog(doc: YamlDocument): void {
327-
for (const [key, value] of Object.entries(OVERRIDE_PACKAGES)) {
324+
for (const [key, value] of Object.entries(VITE_PLUS_OVERRIDE_PACKAGES)) {
328325
doc.setIn(['catalog', key], scalarString(value));
329326
}
330327
doc.setIn(['catalog', VITE_PLUS_NAME], scalarString(VITE_PLUS_VERSION));
@@ -361,19 +358,19 @@ function rewriteRootWorkspacePackageJson(
361358
...pkg.resolutions,
362359
// FIXME: yarn don't support catalog on resolutions
363360
// https://github.com/yarnpkg/berry/issues/6979
364-
...OVERRIDE_PACKAGES,
361+
...VITE_PLUS_OVERRIDE_PACKAGES,
365362
};
366363
} else if (packageManager === PackageManager.npm) {
367364
pkg.overrides = {
368365
...pkg.overrides,
369-
...OVERRIDE_PACKAGES,
366+
...VITE_PLUS_OVERRIDE_PACKAGES,
370367
};
371368
} else if (packageManager === PackageManager.pnpm) {
372369
// pnpm use overrides field at pnpm-workspace.yaml
373370
// so we don't need to set overrides field at package.json
374371
// remove packages from `resolutions` field and `pnpm.overrides` field if they exist
375372
// https://pnpm.io/9.x/package_json#resolutions
376-
for (const key of [...Object.keys(OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
373+
for (const key of [...Object.keys(VITE_PLUS_OVERRIDE_PACKAGES), ...REMOVE_PACKAGES]) {
377374
if (pkg.pnpm?.overrides?.[key]) {
378375
delete pkg.pnpm.overrides[key];
379376
}
@@ -438,7 +435,7 @@ export function rewritePackageJson(
438435
}
439436
const supportCatalog = isMonorepo && packageManager !== PackageManager.npm;
440437
let needVitePlus = false;
441-
for (const [key, version] of Object.entries(OVERRIDE_PACKAGES)) {
438+
for (const [key, version] of Object.entries(VITE_PLUS_OVERRIDE_PACKAGES)) {
442439
const value = supportCatalog ? 'catalog:' : version;
443440
if (pkg.devDependencies?.[key]) {
444441
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)