Skip to main content
Generated projects ship with GitHub Actions in .github/workflows/. They run on pull requests to main to verify Docker builds and enforce lint, type and format checks.

Build workflows

Build the API and Web Docker images to prove they compile.

Lint workflows

Run ESLint, TypeScript and Prettier via one reusable template.
The template provides five workflow files:
Web-only projects have no apps/api, so the build-api.yml and run-api-linter.yml workflows aren’t included — only the web build and lint workflows ship.

Build workflows

Each build workflow builds the app’s Docker image with BuildKit layer caching, to catch a broken build before merge.

Build API — build-api.yml

Triggers on PRs to main touching apps/api/** or packages/**.

Build Web — build-web.yml

Same shape, scoped to apps/web/** (and packages/**), building ./apps/web/Dockerfile.

Lint workflows

Linting runs through one reusable workflow that both the API and Web jobs call.

Reusable template — linter.template.yml

Pins the toolchain and runs ESLint, TypeScript and Prettier through lint-action, which posts inline comments on the PR.

Lint API & Web — run-api-linter.yml, run-web-linter.yml

Each one is a thin caller that passes a component and dir into the template:
Both trigger on PRs to main that touch the matching app or packages/**.

Customization

Update Node.js / pnpm versions

Bump them once in linter.template.yml — both lint jobs inherit the change:
Every workflow also defines workflow_dispatch, so you can trigger any of them manually from the Actions tab.