176 lines
3.3 KiB
Markdown
176 lines
3.3 KiB
Markdown
# CI/CD Configuration Guide
|
|
|
|
Configure Woodpecker CI, GitHub Actions, or GitLab CI for quality enforcement.
|
|
|
|
## Woodpecker CI
|
|
|
|
Quality Rails includes `.woodpecker.yml` template.
|
|
|
|
### Pipeline Stages
|
|
|
|
1. **Secret Scan** - gitleaks scans latest commit for hardcoded secrets (runs in parallel, no deps)
|
|
2. **Install** - Dependencies
|
|
3. **Security Audit** - npm audit for CVEs
|
|
4. **Lint** - ESLint checks
|
|
5. **Type Check** - TypeScript compilation
|
|
6. **Test** - Jest with coverage thresholds
|
|
7. **Build** - Production build (gates on all above)
|
|
|
|
### Configuration
|
|
|
|
No additional configuration needed. Push to repository and Woodpecker runs automatically.
|
|
|
|
### Blocking Merges
|
|
|
|
Configure Woodpecker to block merges on pipeline failure:
|
|
1. Repository Settings → Protected Branches
|
|
2. Require Woodpecker pipeline to pass
|
|
|
|
## GitHub Actions
|
|
|
|
Copy from `templates/typescript-node/.github/workflows/quality.yml`:
|
|
|
|
```yaml
|
|
name: Quality Enforcement
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
quality:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 20
|
|
- run: npm ci
|
|
- run: npm audit --audit-level=high
|
|
- run: npm run lint
|
|
- run: npm run type-check
|
|
- run: npm run test -- --coverage
|
|
- run: npm run build
|
|
```
|
|
|
|
### Blocking Merges
|
|
|
|
1. Repository Settings → Branches → Branch protection rules
|
|
2. Require status checks to pass: `quality`
|
|
|
|
## GitLab CI
|
|
|
|
Copy from `templates/typescript-node/.gitlab-ci.yml`:
|
|
|
|
```yaml
|
|
stages:
|
|
- install
|
|
- audit
|
|
- quality
|
|
- build
|
|
|
|
install:
|
|
stage: install
|
|
script:
|
|
- npm ci
|
|
|
|
audit:
|
|
stage: audit
|
|
script:
|
|
- npm audit --audit-level=high
|
|
|
|
lint:
|
|
stage: quality
|
|
script:
|
|
- npm run lint
|
|
|
|
typecheck:
|
|
stage: quality
|
|
script:
|
|
- npm run type-check
|
|
|
|
test:
|
|
stage: quality
|
|
script:
|
|
- npm run test -- --coverage
|
|
|
|
build:
|
|
stage: build
|
|
script:
|
|
- npm run build
|
|
```
|
|
|
|
## Coverage Enforcement
|
|
|
|
Configure Jest coverage thresholds in `package.json`:
|
|
|
|
```json
|
|
{
|
|
"jest": {
|
|
"coverageThreshold": {
|
|
"global": {
|
|
"branches": 80,
|
|
"functions": 80,
|
|
"lines": 80,
|
|
"statements": 80
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
CI will fail if coverage drops below threshold.
|
|
|
|
## Security Scanning
|
|
|
|
### npm audit
|
|
|
|
Runs automatically in CI. Adjust sensitivity:
|
|
|
|
```bash
|
|
npm audit --audit-level=moderate # Block moderate+
|
|
npm audit --audit-level=high # Block high+critical only
|
|
npm audit --audit-level=critical # Block critical only
|
|
```
|
|
|
|
### Snyk Integration
|
|
|
|
Add to CI for additional security:
|
|
|
|
```yaml
|
|
- run: npx snyk test
|
|
```
|
|
|
|
Requires `SNYK_TOKEN` environment variable.
|
|
|
|
## Notification Setup
|
|
|
|
### Woodpecker
|
|
|
|
Configure in Woodpecker UI:
|
|
- Slack/Discord webhooks
|
|
- Email notifications
|
|
- Status badges
|
|
|
|
### GitHub Actions
|
|
|
|
Add notification step:
|
|
|
|
```yaml
|
|
- name: Notify on failure
|
|
if: failure()
|
|
run: |
|
|
curl -X POST $WEBHOOK_URL -d "Build failed"
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
**Pipeline fails but pre-commit passed:**
|
|
- CI runs all packages, pre-commit only checks changed files
|
|
- Fix issues in all packages, not just changed files
|
|
|
|
**npm audit blocks on low-severity:**
|
|
- Adjust `--audit-level` to `moderate` or `high`
|
|
|
|
**Coverage threshold too strict:**
|
|
- Lower thresholds in package.json
|
|
- Add coverage exceptions for specific files
|