when: event: [pull_request] branch: [main, develop] steps: install-dependencies: image: node:18-alpine commands: - npm ci lint: image: node:18-alpine commands: - echo "=== Running ESLint ===" - npm run lint - echo "✅ ESLint check passed" type-check: image: node:18-alpine commands: - echo "=== Running TypeScript type check ===" - npm run type-check - echo "✅ TypeScript type check passed" unit-tests: image: node:18-alpine commands: - echo "=== Running unit tests with coverage ===" - npm run test:unit -- --coverage --coverageReporters=json - | COVERAGE=$(cat coverage/coverage-summary.json | grep -o '"lines":{"pct":[0-9.]*' | grep -o '[0-9.]*$') echo "Current coverage: $COVERAGE%" if [ $(echo "$COVERAGE < 42" | bc -l) -eq 1 ]; then echo "❌ Coverage $COVERAGE% is below threshold 42%" exit 1 fi echo "✅ Coverage $COVERAGE% meets threshold 42%" e2e-tests: image: node:18-alpine commands: - echo "=== Running E2E tests ===" - npx playwright install --with-deps - npm run test:e2e - echo "✅ E2E tests passed" security-check: image: node:18-alpine commands: - echo "=== Running security audit ===" - npm audit --audit-level=moderate - echo "✅ Security audit passed" performance-check: image: node:18-alpine commands: - echo "=== Running performance checks ===" - npm run audit:performance - echo "✅ Performance audit passed" quality-summary: image: node:18-alpine commands: - echo "=== Quality Gate Summary ===" - echo "✅ All quality checks passed" - echo " - ESLint: PASSED" - echo " - TypeScript: PASSED" - echo " - Unit Tests: PASSED (Coverage ≥ 42%)" - echo " - E2E Tests: PASSED" - echo " - Security: PASSED" - echo " - Performance: PASSED"