OpenParable
Skip to content
← Back to skills

Add Ecosystem CI

DevOps & Security
add-ecosystem-ci

Add Ecosystem CI is an Agent Skill for devops & security published in the voidzero-dev/vite-plus repository on GitHub: a SKILL.md instruction file an AI agent can load to do this task.

Add a new ecosystem-ci test case for testing real-world projects against vite-plus

View on GitHub ↗
QUICK START

How to use this skill

Bring this guide into your coding agent with a prompt tailored to the tool you use.

  1. Open your project in Codex.
  2. Copy and paste the prompt below.
  3. Review files and risks before approving any action.
Prompt to paste
Inspect the Agent Skill at https://github.com/voidzero-dev/vite-plus/blob/HEAD/.claude/skills/add-ecosystem-ci/SKILL.md and all supporting files. Report provenance, permissions, scripts, dependencies, and security risks. Propose an exact installation into .agents/skills/add-ecosystem-ci, but wait for my approval before writing files or running scripts.

Copying this prompt does not install or run the skill. Review third-party files before use.

Add Ecosystem-CI Test Case

Add a new ecosystem-ci test case following this process:

Step 1: Get Repository Information

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'

Step 2: Auto-detect Project Configuration

2.1 Check for Subdirectory

Fetch the repository's root to check if the main package.json is in a subdirectory (like web/, app/, frontend/).

2.2 Check if Project Already Uses Vite-Plus

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 VP_FORCE_MIGRATE=1 so vp migrate forces full dependency rewriting instead of skipping with "already using Vite+".

2.3 Auto-detect Commands from GitHub Workflows

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>
  • Commands like: lint, build, test, type-check, typecheck, format, format:check
  • Map detected commands to vp equivalents: vp run lint, vp run build, etc.

2.4 Ask User to Confirm

Present the auto-detected configuration and ask user to confirm or modify:

  • Which directory contains the main package.json? (auto-detected or manual)
  • What Node.js version to use? (22 or 24, try to detect from workflow)
  • Which commands to run? (show detected commands as multi-select options)
  • Which OS to run on? (both, ubuntu-only, windows-only) - default: both

Step 3: Update Files

  1. 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
      }
    }
    
  2. 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
    

Step 4: Verify

4.1 Build fresh tgz packages

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

4.2 Clone and test locally

node ecosystem-ci/clone.ts project-name

4.3 Patch and run commands

# 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
  1. 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
    

Important Notes

  • The directory field is optional - only add it if the package.json is not in the project root
  • If directory is specified in repo.json, it must also be specified in the workflow matrix
  • patch-project.ts automatically handles running vp migrate in the correct directory
  • forceFreshMigration is required for projects that already have vite-plus in their package.json — it sets VP_FORCE_MIGRATE=1 so vp migrate forces full dependency rewriting instead of skipping
  • OS exclusions are added to the existing exclude section in the workflow matrix