# 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
