CI/CD Pipelines
Continuous integration and deployment pipelines
Zeno includes a comprehensive CI pipeline that runs on every push and pull request.
CI Pipeline
The CI pipeline runs these steps in order:
- Lint — Code quality checks with Ultracite
- Type Check — TypeScript validation
- Build — Build all packages
- Unit Tests — Run Vitest tests
- E2E Tests — Run Playwright tests
It can be run locally with:
pnpm ciOr force a rebuild without caches with:
pnpm ci:forceOr generate a dependency graph in turbo-graph.html with:
pnpm ci:graphIt is defined in package.json:
{
"scripts": {
"ci": "pnpm run lint && turbo run types:check build test e2e",
"ci:force": "turbo run types:check build test e2e --force",
"ci:graph": "turbo run types:check build test e2e --graph=turbo-graph.html",
}
}Turborepo Tasks
The pipeline order and dependencies are defined in turbo.json.
GitHub Actions
Zeno includes a GitHub Actions workflow for CI/CD. It can be found in .github/workflows/turbo.yml.
Caching
Turborepo caches task outputs for faster builds:
- Local cache in
.turbo/ - Remote cache available with Vercel
Enable remote caching locally with:
npx turbo login
npx turbo linkEnable remote caching within Github Actions by editing and uncommenting the following lines in .github/workflows/turbo.yml:
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
TURBO_CACHE: remote:rwE2E in CI
Playwright tests in CI have special settings:
- HTML reporter for artifacts
- 3 retries on failure
- 30-second timeout (120s locally)
- Trace collection on first retry for debugging
{
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 3 : 0,
reporter: process.env.CI ? "html" : "list",
timeout: process.env.CI ? 30_000 : 120_000,
}