Skip to content

chore: migrate toolchain from Vite+ (vp) to Turborepo + standalone tools#235

Merged
sriramveeraghanta merged 4 commits into
mainfrom
chore/migrate-vp-to-turborepo
Jul 16, 2026
Merged

chore: migrate toolchain from Vite+ (vp) to Turborepo + standalone tools#235
sriramveeraghanta merged 4 commits into
mainfrom
chore/migrate-vp-to-turborepo

Conversation

@sriramveeraghanta

@sriramveeraghanta sriramveeraghanta commented Jul 16, 2026

Copy link
Copy Markdown
Member

What & why

Replaces the Vite+ (vp) unified toolchain with pnpm + Turborepo + standalone tools. vp bundled ~8 tools behind one CLI; this unbundles it into the underlying tools, with Turborepo driving the task graph. Scripts follow plane-ee's check:* / fix:* convention. No component/source changes — toolchain, config, scripts, and the docs-app rename only.

Tool mapping

vp capability Replacement
vp run (Vite Task) Turborepoturbo.json (^build orders propel's dist before docs/storybook)
vp pack (library build) tsdown — per-package tsdown.config.ts (attw + publint preserved)
vp test Vitestvitest.config.ts (vitest/config + @vitest/browser-playwright)
vp check → lint Oxlint.oxlintrc.json (custom JS plugin + --type-aware via oxlint-tsgolint)
vp check → format Oxfmt.oxfmtrc.json (Tailwind/import/package.json/JSDoc sorting), pinned to 0.57.0
vp check → typecheck tsc --noEmit (libs) / astro check (docs)
vp install / vp config pnpm + corepack
vp staged + .vite-hooks/ Removed — no pre-commit hooks; run pnpm check / pnpm fix explicitly and in CI
setup-vp (CI) pnpm/action-setup + actions/setup-node
catalog vite = @voidzero-dev/vite-plus-core fork upstream vite@^8 (required by astro 7; supported by vitest 4 / storybook 10 / tailwind)

Scripts — plane-ee check:* / fix:* convention

Every root script is a turbo run <task> that fans out to per-package scripts:

  • check = check:format + check:lint + check:types; fix = fix:format + fix:lint
  • Per package: check:lint (oxlint --type-aware -c ../../.oxlintrc.json .), check:format (oxfmt . --check), check:types (tsc --noEmit / astro check), fix:lint, fix:format
  • build dependsOn check:types; propel has a pretest hook that installs Playwright Chromium

Docs app rename

apps/propel-docsapps/docs; package name @makeplane/propel-docsdocs (all references updated).

Verification (all green locally)

  • pnpm check (check:format + check:lint + check:types) — 10/10 tasks, 0 lint / format / type errors. The custom propel/prefer-tailwind-v4-shorthand rule and consistent-type-definitions fire on violations.
  • pnpm test805 tests (793 story tests across 116 files on headless chromium + 12 plugin unit tests).
  • pnpm build — propel (2482 files, attw ✓ publint ✓), oxlint plugin, docs (8 pages); Turbo caching confirmed (FULL TURBO).
  • vite-plus fully purged from the dependency tree — it had lingered as an optional peer of oxlint/oxfmt whose bundled oxfmt/oxlint bins shadowed the standalone ones (breaking oxfmt .); a clean re-resolve drops it, and build-storybook runs on plain vite 8 with no vite-plus.

Notes

  • CI runs pnpm checkpnpm testpnpm build; the propel pretest hook installs Chromium, and Turbo's cache is persisted via actions/cache on .turbo.
  • No pre-commit hooks. The earlier simple-git-hooks + lint-staged setup was removed; formatting/linting is enforced via pnpm check / pnpm fix and CI.
  • oxfmt is pre-1.0 → pinned exactly (0.57.0) so a floating upgrade can't reformat everything.
  • Oxlint type-aware linting requires oxlint-tsgolint (added as a direct devDep).
  • turbo is a plain root devDep (not via the pnpm catalog — a known catalog build-order bug).

Out of scope

Component/source code and the Changesets release flow (kept as-is, driven via pnpm exec changeset / turbo run build).

Unbundle the Vite+ (vp) toolchain into standalone tools orchestrated by
Turborepo, preserving every capability and rule:

- Orchestration: Vite Task -> Turborepo (turbo.json; `^build` orders
  @makeplane/propel's dist before propel-docs / storybook).
- Library builds: `vp pack` -> tsdown (per-package tsdown.config.ts); attw +
  publint preserved.
- Tests: `vp test` -> standalone Vitest (vitest.config.ts, @vitest/browser-playwright).
- Lint/format: `vp check` -> standalone Oxlint (.oxlintrc.json — custom JS plugin
  + type-aware via oxlint-tsgolint) and Oxfmt (.oxfmtrc.json, pinned).
- Package manager/runtime: `vp install` / `vp config` -> pnpm + corepack.
- Pre-commit: vp `staged` -> simple-git-hooks + lint-staged (oxfmt).
- Vite: the @voidzero-dev/vite-plus-core fork -> upstream vite@^8 (astro 7 needs it).
- CI: setup-vp -> pnpm/action-setup + actions/setup-node; vp commands -> turbo/pnpm.

Verified green: build (propel 2482 files, docs, plugin), typecheck, test
(793 + 12), build-storybook (no vite-plus needed), lint (custom rule + type-aware
fire), format; Turbo caching (FULL TURBO) confirmed.

Claude-Session: https://claude.ai/code/session_01LjeZkZxitGSSzespQabk6E
Copilot AI review requested due to automatic review settings July 16, 2026 16:39
@github-actions

Copy link
Copy Markdown

📚 Storybook preview: https://pr-235-propel-storybook.vamsi-906.workers.dev

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the monorepo off the Vite+ (vp) unified toolchain and onto pnpm + Turborepo orchestration with standalone tool configs (tsdown, Vitest, Oxlint, Oxfmt), updating CI and docs accordingly.

Changes:

  • Replace Vite+ config/task runner setup with turbo.json and per-package tsdown.config.ts / vitest.config.ts.
  • Switch repo/package scripts and GitHub Actions workflows from vp to pnpm + turbo, including .turbo caching and telemetry disable.
  • Move lint/format configuration into .oxlintrc.json / .oxfmtrc.json and update documentation/references across the repo.

Reviewed changes

Copilot reviewed 27 out of 30 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
vite.config.ts Removed repo-root Vite+ configuration (staged/check/test/fmt/lint/run tasks).
turbo.json Added Turborepo task graph for build/test/typecheck/dev and outputs.
tools/oxlint-plugin-propel/vite.config.ts Removed tool package’s Vite+ configuration.
tools/oxlint-plugin-propel/tsdown.config.ts Added tsdown build config for the Oxlint plugin package.
tools/oxlint-plugin-propel/tests/index.test.ts Switched tests from vite-plus/test to vitest.
tools/oxlint-plugin-propel/README.md Updated docs to reference .oxlintrc.json and pnpm commands.
tools/oxlint-plugin-propel/package.json Replaced vp scripts/deps with tsdown + vitest.
README.md Updated repo-level setup and command documentation to pnpm/turbo/tools.
pnpm-workspace.yaml Updated catalog/overrides/peer rules for Vite 8 + standalone tools and removed Vite+.
packages/propel/vitest.shims.d.ts Updated Vitest browser-playwright type reference.
packages/propel/vitest.config.ts Added standalone Vitest config (storybook addon + playwright provider, ignore patterns).
packages/propel/vite.config.ts Removed package-level Vite+ config (pack/run/test settings).
packages/propel/tsdown.config.ts Added standalone tsdown config for library build (entry generation + publint/attw/etc).
packages/propel/tsconfig.json Updated includes to cover new config files (vitest/tsdown).
packages/propel/README.md Updated package development docs to tsdown/pnpm/turbo terminology.
packages/propel/package.json Added build/test/typecheck scripts and swapped deps from Vite+ to tsdown/vitest/publint/attw core.
packages/propel/AGENTS.md Updated contributor checklist commands to pnpm-based workflow.
package.json Replaced vp prepare with simple-git-hooks; added pnpm/turbo/lint/format/check scripts and lint-staged config.
apps/propel-docs/README.md Updated docs build/typecheck guidance to use Turbo dependency ordering.
apps/propel-docs/package.json Simplified scripts to astro build/check (dependency ordering handled by Turbo).
apps/propel-docs/astro.config.mjs Updated comment to reflect tsdown watch build vs Vite+.
AGENTS.md Replaced toolchain section from Vite+ to pnpm + Turborepo + standalone tools.
.vite-hooks/pre-commit Removed old Vite+ hook entrypoint.
.oxlintrc.json Added standalone Oxlint configuration (plugins/rules/ignores/type-aware).
.oxfmtrc.json Added standalone Oxfmt configuration (ignores + Tailwind/import/package.json/jsdoc sorting).
.gitignore Added .turbo to ignores.
.github/workflows/storybook.yml Switched workflow setup/install/build to pnpm + turbo and cache .turbo.
.github/workflows/release.yml Switched release workflow from Vite+ to pnpm + turbo build + changesets via pnpm exec.
.github/workflows/ci.yml Switched CI from Vite+ to pnpm + turbo; separated build/typecheck from browser tests; cache .turbo.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .oxlintrc.json
Build on the Turborepo migration by aligning workspace tooling with plane-ee's
conventions and finishing the vite-plus removal.

- Scripts: add plane-ee's `check:*` / `fix:*` convention across every package
  (check:lint, check:format, check:types, fix:lint, fix:format) plus umbrella
  `check` and `fix`; each root script is a `turbo run <task>`.
- turbo.json: add check + check:{format,lint,types} and fix + fix:{format,lint}
  tasks (mirroring plane-ee's graph); `build` now dependsOn `check:types`.
- Per package: `oxlint --type-aware -c ../../.oxlintrc.json .`, `oxfmt . --check`
  / `--write`, `tsc --noEmit` for types; propel gains a `pretest` Playwright hook.
- Rename apps/propel-docs → apps/docs (package name `docs`); update all refs.
- Purge vite-plus from the dependency tree: it lingered as an optional peer of
  oxlint/oxfmt, and its bundled `oxfmt`/`oxlint` bins shadowed the standalone
  ones (breaking `oxfmt .`). Clean re-resolve drops it. Also unset the stale
  `core.hooksPath` so simple-git-hooks installs into `.git/hooks`, and add
  `fixedExtension` to the oxlint-plugin tsdown build so emitted `.mjs` matches
  its committed exports.
- CI: run `pnpm check` + `pnpm test` + `pnpm build` (the pretest hook installs
  Chromium).

Validated: pnpm check (10/10), pnpm test (805), pnpm build (attw+publint clean).
Drop the simple-git-hooks + lint-staged pre-commit setup entirely: remove the
`prepare` script, both devDependencies, and their config blocks, and uninstall
the installed hook. Formatting/linting is run explicitly via `pnpm check` / `pnpm fix`
and in CI, not on commit.
Add `**/dist/**` to `.oxlintrc.json` ignorePatterns for parity with
`.oxfmtrc.json`, so root-level `oxlint .` never traverses build output
(addresses Copilot review on #235).
@sriramveeraghanta
sriramveeraghanta merged commit 7a84080 into main Jul 16, 2026
2 checks passed
@sriramveeraghanta
sriramveeraghanta deleted the chore/migrate-vp-to-turborepo branch July 16, 2026 20:26
sriramveeraghanta added a commit that referenced this pull request Jul 16, 2026
Integrate the Vite+ -> Turborepo toolchain migration (#235), which also
renamed apps/propel-docs -> apps/docs.

Conflicts resolved:
- apps/docs/wrangler.jsonc: kept the Cloudflare Workers static-assets deploy
  config from this branch (workers_dev + preview_urls, not_found_handling
  '404-page', no account_id — driven by Cloudflare Git integration). Worker
  name kept as 'propel-docs' to mirror the 'propel-storybook' sibling (CF
  worker names are account-global), dropping main's stale account_id TODO.
- apps/docs/src/pages/404.astro: relocated from the old apps/propel-docs path
  into the renamed apps/docs tree.

Validated on the merged Turborepo toolchain: pnpm install (up to date),
turbo build --filter=docs (astro check 0 errors; dist/404.html generated),
check:format + check:lint clean.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants