# CI/CD — Fundamental Skill

Skill para pipelines de integración y deploy continuo. Usar al configurar GitHub Actions, planificar deploys, o definir QA gates.

---

## Pipeline stages

Orden de ejecución. Stages marcados como cruciales bloquean el deploy si fallan.

1. Install: Dependencias con cache. Lockfile. --frozen-lockfile siempre.
2. Lint: Errores de estilo. Falla si hay warnings.
3. Type check: TypeScript strict. No compila = no pasa.
4. Test (CRUCIAL): Unit + integration. Paralelizá. < 5 minutos.
5. Build (CRUCIAL): Artefacto inmutable. Docker image, static bundle.
6. Security scan: Dependency audit + SAST. Bloquea por critical/high.
7. Deploy staging (CRUCIAL): Automático al mergear a main.
8. E2E smoke test (CRUCIAL): Contra staging. Flujos críticos.
9. Deploy production (CRUCIAL): Manual con approval gate.

---

## Entornos

| Entorno | Propósito | Datos | Deploy | Destruir |
|---------|-----------|-------|--------|----------|
| Local | Desarrollo individual | DB local + seeds | Manual (pnpm dev) | Libre |
| Preview | Por PR. Efímero | DB clonada de staging | Automático por PR | Al cerrar PR |
| Staging | Pre-producción | Anonimizada, realista | Automático al merge | Nunca. Se resetea |
| Production | Usuarios reales | Real. Backups c/hora | Manual con approval | Nunca |

### Reglas de entornos
1. Cada entorno tiene sus propias credenciales
2. Staging debe ser idéntico a producción
3. Preview environments por PR son oro
4. Nadie tiene SSH directo a producción
5. Rotá secrets periódicamente

---

## Estrategias de Deploy

### Rolling
Reemplazo de instancias de a una. Sin downtime, riesgo de inconsistencias durante rollout.
Cuándo: APIs stateless.

### Blue-Green
Dos entornos idénticos. Deploy en green, redirigís tráfico. Rollback instantáneo.
Cuándo: Sistemas críticos. Cuesta el doble en infra.

### Canary
Deploy a pequeño % de usuarios. Monitoreás. Aumentás gradualmente.
Cuándo: Cambios de alto riesgo. Necesitás buen monitoreo.

### Feature Flags
Código "dormido". Activás por configuración. Rollback = desactivar el flag.
Cuándo: Features grandes. Reglas: dueño + fecha expiración, remover cuando estable, testear ON y OFF.

---

## QA Gates

Gates que bloquean el merge/deploy:

1. **Lint & Format** (BLOCK): Bloquea si hay errores
2. **Type check** (BLOCK): Cero any sin justificar
3. **Unit tests** (BLOCK): Coverage ≥ 80%
4. **Integration tests** (BLOCK): Contra DB real
5. **Bundle size** (WARN): Alerta si +10%
6. **Security audit** (BLOCK): Bloquea critical/high
7. **Code review** (BLOCK): Mínimo 1 approve, autor no aprueba
8. **Manual approval** (BLOCK): Solo prod. Lead tech o DevOps
