Guías

CI y GitHub Actions

Ejecuta InboxTap en CI con un paso en segundo plano, una comprobación de estado o un servidor programático.

InboxTap es un proceso Node 20+ normal: sin imagen Docker, sin contenedor de servicio, nada que almacenar en caché. Todos los proveedores de CI lo ejecutan igual: instalar, iniciar, esperar a la comprobación de estado y ejecutar las pruebas.

Dos formas de ejecutarlo

  • Paso en segundo plano. Inicia la CLI antes del paso de pruebas. Esto reproduce el entorno de desarrollo local y proporciona a todas las pruebas de la tarea un servidor compartido en los puertos predeterminados.
  • Servidor programático. Inicia InboxTapServer con apiPort: 0 y smtpPort: 0 desde el proceso de configuración global del ejecutor de pruebas, como se muestra en la guía de ejecutores de pruebas. No hay pasos adicionales de CI y los puertos asignados automáticamente nunca pueden colisionar.

El resto de esta página muestra el patrón del paso en segundo plano.

Esperar a la comprobación de estado

Consulta /health antes de ceder el control al paso de pruebas. Detectar un fallo aquí de inmediato es mejor que depurar el tiempo de espera agotado de la primera prueba:

npx inboxtap &
timeout 10 bash -c 'until curl -fsS http://localhost:8025/health > /dev/null; do sleep 0.1; done'

/health responde cuando los procesos de escucha SMTP y HTTP están enlazados, e informa de las direcciones y del dominio de destinatarios que están en uso.

Flujo de trabajo de GitHub Actions

name: e2e

on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - name: Start InboxTap
        run: |
          npx inboxtap &
          timeout 10 bash -c 'until curl -fsS http://localhost:8025/health > /dev/null; do sleep 0.1; done'
      - name: Run tests
        run: npm test
        env:
          SMTP_HOST: localhost
          SMTP_PORT: "1025"

El proceso en segundo plano permanece activo durante el resto de la tarea y el ejecutor lo detiene cuando termina; no hace falta ningún paso de cierre.

Puertos y otros proveedores

Los puertos predeterminados 1025 y 8025 están libres en los ejecutores alojados de GitHub, GitLab y CircleCI. Mantén InboxTap en la interfaz de bucle local en CI; no hay motivo para ampliar --smtp-host ni --api-host durante una ejecución de pruebas. En ejecutores autogestionados compartidos donde puedan colisionar tareas concurrentes, pasa valores explícitos de --smtp-port y --api-port para cada tarea, o cambia al servidor programático con el puerto 0. Sea cual sea el proveedor, la secuencia tiene los mismos tres pasos: instalar, iniciar con una comprobación de estado y probar.