Monorepo managed with Turborepo + pnpm.
apps/web- Next.js appapps/docs- Next.js docs appapps/gdit.site- Vite docs appapps/Gdit-gditCLI package (published to npm)packages/ui- shared UI packagepackages/eslint-config- shared ESLint configpackages/typescript-config- shared TS config
Install dependencies:
pnpm installRun all dev tasks:
pnpm devRun monorepo verification (lint + typecheck + build + test):
pnpm verifyRuns on every PR and on pushes to main:
pnpm install --frozen-lockfilepnpm lintpnpm check-typespnpm buildpnpm test
Runs on push to main (and manual dispatch):
- Installs dependencies
- Runs
pnpm verify - Publishes only non-private workspace packages whose local version differs from npm
Publish logic is implemented in:
scripts/ci/publish-changed-packages.mjs
NPM_TOKEN- npm automation token with publish permission.
If you use Vercel Remote Cache, add:
TURBO_TOKENTURBO_TEAM
Then expose them in workflows as environment variables.