What is CI/CD for full-stack?
A pipeline that, on every push, installs, lints, type-checks, tests, and builds both the client and server, then deploys when everything passes. For a full-stack app the pipeline has to handle both halves, the shared code, and the database migrations as one coordinated flow.
Why it matters
Manual full-stack deploys are error-prone — forget a migration, skip a test, ship a type error across the seam. A pipeline makes every change go through the same checks and the same deploy path, so releases become routine and safe. It is the backbone of shipping continuously without fear.
What to learn
- Pipeline stages for a full-stack app
- Type-checking across client, server, and shared code
- Running unit and E2E tests in CI
- Building both halves
- Running migrations in the deploy step
- Caching to keep the pipeline fast
- Required checks before merge and deploy on merge
Common pitfall
A pipeline that builds and deploys but skips type-checking the shared code across
the seam, so a type mismatch between client and server slips to production. The
whole point of end-to-end types is lost if CI does not run tsc across all of it.
Make a full type-check a required check before any deploy.
Resources
Primary (free):
- GitHub Actions — Documentation · docs
- GitHub Actions — Building and testing Node · docs
- Playwright — CI · docs
Practice
Build a CI pipeline that, on every push, type-checks the whole project, runs unit and one E2E test, and builds both halves — as required checks before merge. Add a deploy job on merge to main that runs migrations. Done when a type error across the seam blocks the merge.
Outcomes
- Build a pipeline covering both halves and shared code.
- Type-check across the seam as a required check.
- Run unit and E2E tests in CI.
- Deploy on merge with migrations included.