CI/CD (GitHub Actions)
TypeScript Library Template Pro utiliza GitHub Actions para automatizar pruebas, publicación y despliegue de tu biblioteca.
Flujos de trabajo incluidos
- CI/CD: Ejecuta pruebas, linting y compilación para verificar la calidad del código.
- Release: Publica nuevas versiones de la biblioteca en npm y en GitHub.
- Deploy: Despliega la documentación en GitHub Pages después de una release exitosa.
/
├── .github/
│ └── workflows/
│ ├── ci-cd.yml
│ ├── release.yml
│ └── deploy.yml
└── src/
Diagrama de flujo
Los flujos de trabajo están configurados para ejecutarse de forma secuencial y dependiendo del resultado.
- CI/CD: Se ejecuta cuando se hace push a cualquier rama o se cree una PR.
- Release: Se ejecuta después del workflow
CI/CD
y solo si está en la ramamain
. - Deploy: Se ejecuta después de que se haya creado una nueva release.
┌───────────────────┐
│ Desarrollador │
│ hace push │
└─────────┬─────────┘
│ merge a main
├────────────────────────────┐
│ │
▼ │
┌───────────────────────────────────────────────────┐ │
│ CI/CD workflow │ │
│ │ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ lint │ │ test │ │ build │ │ │
│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │
│ └──────────────┼──────────────┘ │ │
│ │ │ │
│ │ ¿Éxito? │ │
│ │ │ │
│ No │ Sí │ │
│ ┌────────────┴──────┐ │ │
│ ▼ │ │ │
│ ┌────────────────────┐ │ │ │
│ │ Notificar error │ │ ¿Destino? │ │
│ │ al desarrollador │ │ │ │
│ └────────────────────┘ │ │ │
│ main │ PR │ │
│ ┌───────┴──────┐ │ │
│ │ ▼ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ Aprobar la PR │ │ │
│ │ └────────┬────────┘ │ │
│ │ │ │ │
└───────────────────────────────────────────────────┘ │
│ │ │
│ └──────────────┘
│
▼
┌───────────────────────────────────────────────────┐
│ RELEASE workflow │
│ │
│ ┌──────────────────────┐ │
│ │ Analiza commits │ │
│ └──────────┬───────────┘ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ Determina versión │ │
│ └──────────┬───────────┘ │
│ │ │
│ │ ¿Nueva versión? │
│ │ │
│ No │ Sí │
│ ┌───────────┴────────────┐ │
│ ▼ ▼ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Fin del proceso │ │ Actualiza changelog │ │
│ └─────────────────────┘ └──────────┬──────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Publica en npm │ │
│ └──────────┬──────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Crea GitHub Release │ │
│ └──────────┬──────────┘ │
│ ┌─────────────┘ │
│ │ │
└───────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────┐
│ DEPLOY workflow │
│ │
│ ┌──────────────────────────┐ │
│ │ Compila documentación │ │
│ └────────────┬─────────────┘ │
│ ▼ │
│ ┌──────────────────────────┐ │
│ │ Despliega a GitHub Pages │ │
│ └──────────────────────────┘ │
└───────────────────────────────────────────────────┘
Monitoreo de acciones
GitHub proporciona varias herramientas para monitorear el estado y el rendimiento de tus flujos de trabajo:
Visualización en GitHub
Pestaña Actions: Accede a
https://github.com/tu-usuario/tu-repo/actions
para ver todas las ejecuciones de los flujos de trabajo.Insignias de estado: Añade insignias de estado a tu README.md para mostrar el estado actual de tus flujos de trabajo:


- Notificaciones: Configura notificaciones en GitHub para recibir alertas sobre el estado de las ejecuciones de los flujos de trabajo.
Personalización
Aunque los flujos de trabajo incluidos cubren la mayoría de los casos de uso, puedes personalizarlos según tus necesidades específicas.
Modificación del flujo CI/CD
Añadir verificación de cobertura de código
test:
name: Test
runs-on: ubuntu-22.04
steps:
# ... pasos existentes ...
- run: npm run test:coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }} # opcional
directory: ./coverage/
Probar en múltiples versiones de Node.js
test:
name: Test
runs-on: ubuntu-22.04
strategy:
matrix:
node-version: [16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
# ... resto de pasos ...
Añadir análisis de seguridad
security:
name: Security Analysis
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
- run: npm ci --ignore-scripts
- name: Run npm audit
run: npm audit --audit-level=high
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
Modificación del flujo de release
Añadir notificaciones
release:
# ... configuración existente ...
steps:
# ... pasos existentes ...
- name: Notify on success
if: success()
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_TITLE: "Nueva versión publicada"
SLACK_MESSAGE: "La versión ${{ env.RELEASE_VERSION }} ha sido publicada correctamente."
Configurar publicación en múltiples registros
release:
# ... configuración existente ...
steps:
# ... pasos existentes ...
- name: Setup .npmrc for GitHub Packages
run: |
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > .npmrc
echo "@yourusername:registry=https://npm.pkg.github.com" >> .npmrc
- name: Publish to GitHub Packages
run: npm publish
Modificación del flujo de deploy
Personalizar el proceso de documentación
buildDocs:
# ... configuración existente ...
steps:
# ... pasos existentes ...
- name: Generate API documentation
run: npx typedoc src/index.ts --out docs/.vitepress/public/api
- run: npm run docs:build
# ... resto de pasos ...
Añadir verificación de enlaces
buildDocs:
# ... configuración existente ...
steps:
# ... pasos existentes ...
- run: npm run docs:build
- name: Check for broken links
run: npx broken-link-checker --recursive --ordered docs/.vitepress/dist
# ... resto de pasos ...
Casos de uso avanzados
Despliegue condicional
Si quieres desplegar solo en ciertas condiciones, puedes modificar el flujo de deploy:
buildDocs:
if: ${{ github.event.workflow_run.conclusion == 'success' && github.ref == 'refs/heads/main' }}
# ... resto de la configuración ...
Flujos de trabajo programados
Para ejecutar flujos de trabajo en horarios específicos, añade un disparador schedule
:
on:
push:
branches:
- main
schedule:
- cron: "0 0 * * 0" # Cada domingo a medianoche
Matriz de pruebas
Para probar en múltiples entornos, utiliza matrices:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
# ... resto de pasos ...
Solución de problemas comunes
Fallos en la ejecución
Problema: Los flujos de trabajo fallan con errores como "Process completed with exit code 1".
Soluciones:
- Revisa los logs detallados haciendo clic en el job fallido.
- Verifica que las dependencias se instalan correctamente.
- Asegúrate de que los scripts en
package.json
devuelven códigos de salida adecuados.
Problemas con los tokens
Problema: Errores relacionados con permisos o autenticación cuando se utilizan tokens.
Soluciones:
- Verifica que los secrets estén correctamente configurados en la configuración del repositorio.
- Asegúrate de que los tokens tienen los permisos necesarios.
- Comprueba que los tokens no han expirado.