12 / 48 · 16 CI/CD Pipelines · Testing Pyramid in CI← prev⊞ allnext →☰ Read as one page
3.2Stage 1: On Every Push (Seconds to Minutes)
This is the fastest feedback loop. Developers get results before they context-switch away from the code they just wrote.
What runs here:
- Linting and static analysis (ESLint, Pylint, Ruff)
- Type checking (TypeScript
tsc --noEmit, mypy) - Unit tests with coverage reporting
- Formatting checks (Prettier, Black)
Why these and not others:
- They are fast (typically under 2 minutes)
- They require no external services (databases, APIs)
- They catch the most common mistakes (syntax errors, type mismatches, broken logic)
# Example: Fast feedback job
lint-and-unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm run test:unit -- --coverage
- uses: actions/upload-artifact@v4
if: always()
with:
name: coverage
path: coverage/lcov.info
Target time: Under 3 minutes. If linting and unit tests take longer than this, developers will stop waiting for them.