원클릭으로
add-ecosystem-ci
// Add a new ecosystem-ci test case for testing real-world projects against vite-plus
// Add a new ecosystem-ci test case for testing real-world projects against vite-plus
Bump vite-task git dependency to the latest main commit. Use when you need to update the vite-task crates (fspy, vite_glob, vite_path, vite_str, vite_task, vite_workspace) in vite-plus.
Compare tsdown CLI options with vp pack and sync any new or removed options. Use when tsdown is upgraded or when you need to check for CLI option drift between tsdown and vp pack.
Guide for writing subprocess execution code using the vite_command crate
| name | add-ecosystem-ci |
| description | Add a new ecosystem-ci test case for testing real-world projects against vite-plus |
| allowed-tools | Bash, Read, Edit, Write, WebFetch, AskUserQuestion |
Add a new ecosystem-ci test case following this process:
Ask the user for the GitHub repository URL if not provided as argument: $ARGUMENTS
Use GitHub CLI to get repository info:
gh api repos/OWNER/REPO --jq '.default_branch'
gh api repos/OWNER/REPO/commits/BRANCH --jq '.sha'
Fetch the repository's root to check if the main package.json is in a subdirectory (like web/, app/, frontend/).
Check the project's root package.json for vite-plus in dependencies or devDependencies. If the project already uses vite-plus, set forceFreshMigration: true in repo.json. This tells patch-project.ts to set VITE_PLUS_FORCE_MIGRATE=1 so vp migrate forces full dependency rewriting instead of skipping with "already using Vite+".
Fetch the project's GitHub workflow files to detect available commands:
# List workflow files
gh api repos/OWNER/REPO/contents/.github/workflows --jq '.[].name'
# Fetch workflow content (for each .yml/.yaml file)
gh api repos/OWNER/REPO/contents/.github/workflows/ci.yml --jq '.content' | base64 -d
Look for common patterns in workflow files:
pnpm run <command> / npm run <command> / yarn <command>lint, build, test, type-check, typecheck, format, format:checkvp equivalents: vp run lint, vp run build, etc.Present the auto-detected configuration and ask user to confirm or modify:
Add to ecosystem-ci/repo.json:
{
"project-name": {
"repository": "https://github.com/owner/repo.git",
"branch": "main",
"hash": "full-commit-sha",
"directory": "web", // only if subdirectory is needed
"forceFreshMigration": true // only if project already uses vite-plus
}
}
Add to .github/workflows/e2e-test.yml matrix:
- name: project-name
node-version: 24
directory: web # only if subdirectory is needed
command: |
vp run lint
vp run build
Always rebuild tgz packages from latest source to avoid using stale cached versions:
# Rebuild the global CLI first (includes Rust binary + NAPI binding)
pnpm bootstrap-cli
# Pack fresh tgz files into tmp/tgz/
rm -rf tmp/tgz && mkdir -p tmp/tgz
cd packages/core && pnpm pack --pack-destination ../../tmp/tgz && cd ../..
cd packages/test && pnpm pack --pack-destination ../../tmp/tgz && cd ../..
cd packages/cli && pnpm pack --pack-destination ../../tmp/tgz && cd ../..
ls -la tmp/tgz
node ecosystem-ci/clone.ts project-name
# Run from the ecosystem-ci temp directory
cd $(node -e "const os=require('os'); console.log(os.tmpdir() + '/vite-plus-ecosystem-ci')")
# Migrate the project (uses tgz files from tmp/tgz/)
node /path/to/vite-plus/ecosystem-ci/patch-project.ts project-name
# Run the configured commands
cd project-name
vp run build
Add OS exclusion to .github/workflows/e2e-test.yml (if not running on both):
For ubuntu-only:
exclude:
- os: windows-latest
project:
name: project-name
For windows-only:
exclude:
- os: ubuntu-latest
project:
name: project-name
directory field is optional - only add it if the package.json is not in the project rootdirectory is specified in repo.json, it must also be specified in the workflow matrixpatch-project.ts automatically handles running vp migrate in the correct directoryforceFreshMigration is required for projects that already have vite-plus in their package.json — it sets VITE_PLUS_FORCE_MIGRATE=1 so vp migrate forces full dependency rewriting instead of skippingexclude section in the workflow matrix