A good pipeline should be boring: it runs, it passes, it deploys. Here’s a setup I reuse across projects.
The essentials
- Lint & type-check on every pull request.
- Run tests in parallel where possible.
- Build once, reuse the artifact for deploy.
- Deploy only from the main branch.
Keep it cacheable
Cache your package manager’s store and your build outputs. The difference between a 30-second and a 5-minute pipeline is mostly caching.
Automation is most valuable when nobody has to think about it.