Menguasai implementasi quality gates otomatis di CI/CD pipeline termasuk coverage gates, performance gates, dan quality policies

Setelah di episode 8 kita mempelajari shift-left testing, pada episode ini kita mempelajari quality gates in CI/CD — bagaimana implementasi quality gates otomatis di pipeline. Quality gates adalah checkpoint otomatis yang memastikan kualitas sebelum lanjut ke stage berikutnya.
Mengapa quality gates penting? Karena tanpa quality gates, code yang bermasalah bisa lolos ke production. Dengan quality gates otomatis, kalian bisa mencegah regression dan menjaga kualitas secara konsisten.
Coverage Gates:
├── Unit Test Coverage:
│ ├── Minimum: 80%
│ ├── Target: 90%
│ └── Tools: Jest, Vitest
├── Integration Test Coverage:
│ ├── Minimum: 70%
│ ├── Target: 80%
│ └── Tools: Custom reporting
├── E2E Test Coverage:
│ ├── Critical paths: 100%
│ ├── All paths: 60%
│ └── Tools: Playwright
└── Code Coverage:
├── Line coverage
├── Branch coverage
└── Function coveragePerformance Gates:
├── Response Time:
│ ├── API: < 200ms
│ ├── Page load: < 2s
│ └── Tools: k6, Lighthouse
├── Bundle Size:
│ ├── JavaScript: < 200KB
│ ├── CSS: < 50KB
│ └── Tools: size-limit
├── Lighthouse Score:
│ ├── Performance: > 90
│ ├── Accessibility: > 90
│ └── Tools: Lighthouse CI
└── Memory Usage:
├── Heap: < 512MB
└── Tools: Clinic.jsSecurity Gates:
├── Dependency Scan:
│ ├── No high/critical vulnerabilities
│ ├── Tools: Snyk, npm audit
│ └── Auto-fix: Dependabot
├── SAST (Static Analysis):
│ ├── No critical issues
│ ├── Tools: SonarQube, Semgrep
│ └── Custom rules
├── DAST (Dynamic Analysis):
│ ├── No high vulnerabilities
│ ├── Tools: OWASP ZAP
│ └── Baseline scan
└── License Check:
├── No forbidden licenses
└── Tools: license-checker# .github/workflows/quality-gates.yml
name: Quality Gates
on: [push, pull_request]
jobs:
quality-gates:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- name: Linting
run: npm run lint
- name: Type Check
run: npm run typecheck
- name: Unit Tests
run: npm run test:unit -- --coverage
- name: Coverage Check
run: |
COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')
if [ $(echo "$COVERAGE < 80" | bc) -eq 1 ]; then
echo "Coverage below 80%"
exit 1
fi
- name: Security Scan
run: npm audit --audit-level=high
- name: Bundle Size
run: npx size-limitNote
Quality gates harus realistis. Jika threshold terlalu ketat, pipeline akan sering gagal dan developer akan frustrasi. Mulai dengan threshold moderate dan naikkan secara bertahap.
Quality Policies:
├── Code Review:
│ ├── Minimum 1 approval
│ ├── No self-merge
│ └── Review checklist
├── Test Requirements:
│ ├── Unit tests wajib
│ ├── Integration tests untuk API
│ └── E2E untuk critical paths
├── Documentation:
│ ├── API documentation
│ ├── README updated
│ └── CHANGELOG updated
└── Release:
├── All gates passed
├── QA sign-off
└── Product owner approvalQuality Gates Dashboard:
├── Status:
│ ├── Passing: 8/10 gates
│ ├── Failing: 2/10 gates
│ └── Trend: Improving
├── Details:
│ ├── ✅ Linting
│ ├── ✅ Type Check
│ ├── ✅ Unit Tests
│ ├── ✅ Coverage (85%)
│ ├── ✅ Security
│ ├── ✅ Performance
│ ├── ✅ Bundle Size
│ ├── ❌ Integration Tests (70% < 80%)
│ ├── ✅ E2E Tests
│ └── ❌ Documentation
└── Actions:
├── Fix integration tests
└── Update documentationTip
Visualisasi quality gates membantu tim memahami status kualitas. Gunakan dashboard untuk memberikan visibility ke seluruh tim, bukan hanya QA.
Pada episode 9 ini, kalian telah mempelajari quality gates in CI/CD.
Inti yang harus dibawa pulang:
Di episode 10 selanjutnya, kita akan membahas test environments & test ops — bagaimana mengelola test environments secara efektif. Sampai jumpa di episode 10!