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:
pusha la ramamain.pull_requestcon destinomain.
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:
- Que
pnpm db:seed(en@expressmx/database) cree un admin determinista con credenciales conocidas. - Reemplazar el guard
if: falseporif: github.event_name == 'pull_request'. - Exportar
E2E_ADMIN_AVAILABLE=1,E2E_ADMIN_EMAIL,E2E_ADMIN_PASSWORDdesde 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:
- Al abrir el PR la GitHub Action
neon-create-branchcorreneonctl branches create --project-id aged-flower-24986215 --parent production --name preview/pr-<NUM>. - El connection string se inyecta como
DATABASE_URLen el preview deploy de Vercel. - Al cerrar/mergear el PR se ejecuta
neonctl branches delete preview/pr-<NUM>. - Vida típica: 1 a 4 días; cap superior 7 días con cleanup automático.
Expo EAS (móviles)
Release manual y opcional, no se dispara por push a main. Disparadores
operativos:
eas build --platform allpara construir cliente y prestador.eas submitpara enviar a App Store y Play Store.
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 |