← Documentos

Pipeline CI/CD

1. Pipeline CI/CD

Documento que detalla el pipeline definido en .github/workflows/ci.yml, su relación con Vercel, Neon y Expo EAS, y los comandos exactos ejecutados por cada job.

Última actualización: 2026-05-05


1.1 Disparo del pipeline

El workflow CI se ejecuta sobre dos eventos:

Todos los jobs corren en ubuntu-latest con Node 20 y pnpm 9.15.0 cacheado por actions/setup-node. La variable TURBO_TELEMETRY_DISABLED=1 se establece en los tres jobs principales para evitar telemetría externa.

1.2 Jobs paralelos

quality

Ejecuta typecheck y lint sobre el monorepo completo, sin acceso a base de datos.

pnpm install --frozen-lockfile
pnpm turbo run typecheck lint
Variable Valor
TURBO_TELEMETRY_DISABLED 1

test

Levanta un servicio efímero postgres:16 y aplica el schema completo antes de correr los tests.

pnpm install --frozen-lockfile
psql postgresql://test:test@localhost:5432/expressmx_test -f 00.sql
for f in migrations/*.sql; do
  psql postgresql://test:test@localhost:5432/expressmx_test -f "$f"
done
pnpm turbo run test
Variable Valor
DATABASE_URL postgresql://test:test@localhost:5432/expressmx_test
JWT_SECRET ci-test-secret-min-32-chars-long-enough
NODE_ENV test
TURBO_TELEMETRY_DISABLED 1

build

Depende de quality (needs: [quality]). No depende de test para acortar el tiempo total del PR. Usa placeholders porque el build estático no necesita conexión real.

pnpm install --frozen-lockfile
pnpm turbo run build
Variable Valor
DATABASE_URL postgresql://placeholder
JWT_SECRET build-time-placeholder-min-32-chars
TURBO_TELEMETRY_DISABLED 1

1.3 Job e2e (deshabilitado)

El job e2e está marcado con if: false en el workflow. Para activarlo se requiere:

  1. Que pnpm db:seed (en @expressmx/database) cree un admin determinista con credenciales conocidas.
  2. Reemplazar el guard if: false por if: github.event_name == 'pull_request'.
  3. Exportar E2E_ADMIN_AVAILABLE=1, E2E_ADMIN_EMAIL, E2E_ADMIN_PASSWORD desde secrets o seed.

Pasos planeados (cuando se active):

pnpm install --frozen-lockfile
psql ... -f 00.sql && for f in migrations/*.sql; do psql ... -f "$f"; done
# pnpm db:seed   <-- TODO seed determinista
pnpm --filter @expressmx/web e2e:install
pnpm --filter @expressmx/web e2e

Salida: apps/web/playwright-report/ se sube como artefacto con retención de 7 días.

1.4 Despliegues post-merge

Vercel (web)

Tras el merge a main, Vercel detecta el push y arranca el build production inyectando la DATABASE_URL real del scope production. El despliegue preview se asocia al PR y reusa la conexión del branch Neon preview.

Neon (Postgres serverless)

Coordina el ciclo de vida del branch de base de datos por PR:

Expo EAS (móviles)

Release manual y opcional, no se dispara por push a main. Disparadores operativos:

1.5 Resumen de gates por PR

Gate Tipo Bloqueante
quality (typecheck + lint) obligatorio sí
test (vitest + Postgres) obligatorio sí
build (Next.js + paquetes) obligatorio sí
e2e (Playwright) futuro no (desactivado)
Preview Vercel informativo no
Preview Neon branch dependencia de Vercel no

↑ Volver arriba