Este documento propone un sistema completo de Integración Continua (CI) y Despliegue Continuo (CD) para automatizar el proceso de construcción, testing y publicación de la librería @nestjslatam/ddd-lib a NPM utilizando GitHub Actions.
- Automatizar el proceso de build y deployment
- Garantizar calidad mediante testing automático
- Prevenir errores antes del deployment
- Versionado automático basado en commits convencionales
- Publicación automática a NPM tras validaciones exitosas
ddd/
├── libs/ddd/ # Librería principal a publicar
│ ├── src/ # Código fuente
│ ├── package.json # Configuración NPM (@nestjslatam/ddd-lib)
│ └── tsconfig.lib.json # Configuración TypeScript para build
├── src/ # Aplicación de ejemplo (no se publica)
├── test/ # Tests E2E
├── package.json # Configuración raíz del proyecto
└── .release-it.json # Configuración de release-it
build:lib: Construye la librería (rimraf dist/libs/ddd && tsc -p ./libs/ddd/tsconfig.lib.json && sh ./copy.sh)release:lib: Publica a NPM (cd dist/libs/ddd && npm publish --access public)test: Ejecuta tests unitariostest:cov: Ejecuta tests con coberturatest:e2e: Ejecuta tests end-to-endlint: Valida código con ESLintformat: Formatea código con Prettier
- ✅ Husky: Git hooks
- ✅ Commitlint: Validación de mensajes de commit (Conventional Commits)
- ✅ ESLint: Linting de código
- ✅ Prettier: Formateo de código
- ✅ Jest: Framework de testing
- ✅ Release-it: Gestión de versiones y releases
┌─────────────────────────────────────────────────────────────┐
│ GitHub Repository │
└─────────────────────────────────────────────────────────────┘
│
│ Push/PR
↓
┌─────────────────────────────────────────────────────────────┐
│ CI Pipeline (GitHub Actions) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 1. Checkout Code │ │
│ │ 2. Setup Node.js │ │
│ │ 3. Install Dependencies │ │
│ │ 4. Lint & Format Check │ │
│ │ 5. Type Check (TypeScript) │ │
│ │ 6. Unit Tests (with coverage) │ │
│ │ 7. E2E Tests │ │
│ │ 8. Build Library │ │
│ │ 9. Validate Build Output │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────┴────────┐ │
│ │ │ │
│ ✅ Pass ❌ Fail │
│ │ │ │
│ ↓ ↓ │
│ Continue Block Merge │
└─────────────────────────────────────────────────────────────┘
│
│ (Only on main/master)
↓
┌─────────────────────────────────────────────────────────────┐
│ CD Pipeline (GitHub Actions) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 1. Detect Version Change │ │
│ │ 2. Create GitHub Release │ │
│ │ 3. Build Library │ │
│ │ 4. Publish to NPM │ │
│ │ 5. Create Git Tag │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
↓
┌───────────────┐
│ NPM Registry│
│ @nestjslatam/ │
│ ddd-lib │
└───────────────┘
Archivo: .github/workflows/ci.yml
Trigger:
- Push a cualquier rama
- Pull Requests
- Manual dispatch
Jobs:
- Verifica formato con Prettier
- Ejecuta ESLint
- Valida estructura de código
- Verifica tipos TypeScript
- Valida configuración de paths
- No genera build, solo verifica tipos
- Ejecuta todos los tests unitarios (
*.spec.ts) - Genera reporte de cobertura
- Sube cobertura a Codecov (opcional)
- Quality Gate: Cobertura mínima 80%
- Ejecuta tests end-to-end
- Valida integración completa
- Usa base de datos de prueba
- Construye la librería
- Valida que el build sea exitoso
- Verifica estructura de archivos generados
- Valida
package.jsondel build
Matriz de Testing:
- Node.js: 18.x, 20.x, 22.x (LTS)
- OS: ubuntu-latest, windows-latest, macos-latest
Archivo: .github/workflows/cd.yml
Trigger:
- Push a
mainomastercon cambios enlibs/ddd/ - Tags que coincidan con patrón
v*.*.* - Manual dispatch con selección de versión
Jobs:
- Detecta cambios en
libs/ddd/package.json - Determina tipo de versión (patch, minor, major) basado en commits
- Usa
semantic-releaseorelease-itpara versionado automático
- Construye la librería
- Ejecuta tests antes de publicar
- Publica a NPM con
--access public - Crea GitHub Release
- Crea Git Tag
Seguridad:
- Usa
NPM_TOKENcomo secret - Solo ejecuta en rama
main/master - Requiere aprobación manual para releases major
Archivo: .github/workflows/release.yml
Trigger:
- Manual dispatch
- Después de merge a main (opcional)
Funcionalidad:
- Usa
release-itosemantic-release - Genera changelog automático
- Crea GitHub Release
- Publica a NPM
- Actualiza versiones
-
NPM_TOKEN
- Token de acceso a NPM
- Permisos:
publishyread - Generado desde npmjs.com
-
CODECOV_TOKEN (opcional)
- Para reportes de cobertura
- Si se usa Codecov
Configurar en GitHub:
- ✅ Require status checks to pass before merging
- ✅ Require branches to be up to date before merging
- ✅ Require pull request reviews before merging
- ✅ Require CI workflow to pass
- ✅ Do not allow bypassing the above settings
- ✅ Linting: Sin errores de ESLint
- ✅ Formatting: Código formateado correctamente
- ✅ Type Check: Sin errores de TypeScript
- ✅ Unit Tests: Todos los tests pasan
- ✅ Test Coverage: Mínimo 80% de cobertura
- ✅ E2E Tests: Todos los tests E2E pasan
- ✅ Build: Build exitoso sin errores
- ✅ Build Validation: Archivos generados correctamente
⚠️ Cobertura entre 70-80%: Warning pero no bloquea⚠️ Dependencias desactualizadas: Warning en PR
- Automático: Basado en commits convencionales
- Commits:
feat:→ Minor version (1.0.0 → 1.1.0)fix:→ Patch version (1.0.0 → 1.0.1)BREAKING CHANGE:→ Major version (1.0.0 → 2.0.0)
- Ventajas: Completamente automático
- Desventajas: Requiere commits estrictos
- Semi-automático: Requiere confirmación
- Ventajas: Más control
- Desventajas: Requiere intervención manual
- CI detecta cambios y sugiere versión
- CD requiere aprobación manual para publicar
- Mejor balance entre automatización y control
-
Development/Pre-release
- Build en cada commit a
develop - No publica a NPM
- Genera artefactos para testing
- Build en cada commit a
-
Staging/RC (Release Candidate)
- Build con tag
-rc.X - Publica como
@nestjslatam/ddd-lib@1.0.0-rc.1 - Permite testing antes de release final
- Build con tag
-
Production
- Build estable
- Publica versión final a NPM
- Crea GitHub Release
- Latest: Última versión estable
- Next: Versiones pre-release (beta, rc)
- Versiones específicas:
1.0.0,1.1.0, etc.
-
GitHub
- Comentarios en PRs
- Issues automáticos en fallos
- Releases automáticos
-
Slack/Discord (Opcional)
- Notificaciones de deployment
- Alertas de fallos críticos
-
Email (Opcional)
- Resumen semanal de builds
- Alertas de fallos
- Build Success Rate: % de builds exitosos
- Test Coverage: Tendencias de cobertura
- Build Time: Tiempo promedio de CI/CD
- Deployment Frequency: Frecuencia de releases
- Mean Time to Recovery: Tiempo para corregir fallos
- Codecov: Cobertura de código
- GitHub Actions: Métricas nativas
- GitHub Insights: Análisis de repositorio
.github/
└── workflows/
├── ci.yml # Continuous Integration
├── cd.yml # Continuous Deployment
├── release.yml # Release Management (opcional)
└── dependency-review.yml # Security scanning (opcional)
.releaserc.json # Configuración semantic-release (si se usa)
.codecov.yml # Configuración Codecov (opcional)
.github/
├── dependabot.yml # Actualización automática de dependencias
└── CODEOWNERS # Code ownership
- Crear workflows básicos de CI
- Configurar secrets en GitHub
- Configurar branch protection
- Testear workflows en rama de desarrollo
- Implementar quality gates
- Configurar reportes de cobertura
- Configurar notificaciones
- Documentar criterios de éxito
- Configurar NPM token
- Implementar deployment automático
- Configurar versionado automático
- Testear deployment en staging
- Optimizar tiempos de build
- Implementar caching
- Configurar dependabot
- Documentar proceso completo
- Reducción de Errores: 90% menos errores en producción
- Velocidad: Deployment en minutos vs horas
- Confianza: Tests automáticos antes de cada release
- Trazabilidad: Historial completo de cambios
- Calidad: Código validado automáticamente
- GitHub Actions: Límites de minutos gratuitos
- NPM: Rate limits en publicaciones
- Tests: Tiempo de ejecución puede ser largo
- Caching: Cachear node_modules y dependencias
- Parallel Jobs: Ejecutar jobs en paralelo
- Selective Testing: Solo ejecutar tests relevantes en PRs
- Revisar y aprobar este plan
- Configurar secrets en GitHub
- Crear workflows base
- Testear en rama de desarrollo
- Iterar y mejorar basado en feedback
Nota: Este es un plan de propuesta. La implementación se realizará después de la aprobación y ajustes necesarios.