Deploy a producción
Producción es la fuente de verdad. Verificá el estado real con gcloud /
firebase antes y después de deployar. En Windows hay gotchas conocidos — están
todos acá.
Pre-deploy (checklist)
pnpm --filter @mentat/web lintantes de buildear (elnext buildlintea;tsc/devno). Imports sin usar rompen el build.- No buildear con el dev server o el emulador corriendo (corrompe
.next). pnpm -r typechecky los tests en verde.
Functions
# 1. Rebuildeá el bundle A MANO (el predeploy con --filter no matchea en Windows)
pnpm --filter @mentat/functions build
# 2. Deploy con discovery timeout extendido
FUNCTIONS_DISCOVERY_TIMEOUT=120 firebase deploy \
--only functions --project dawoork-mentatGotchas de functions en Windows:
- El predeploy
pnpm --filter @mentat/functions buildimprime “No projects matched the filters” y no rebuildea → por eso se rebuildea a mano antes. - Si el deploy falla a mitad, el
strip-package-for-deploy.mjsdejó elpackage.jsonminimizado → restaurá connode apps/functions/scripts/strip-package-for-deploy.mjs restore. - El runtime
nodejs20está deprecado (decommission 2026-10-30) → habrá que subir a Node 22.
Variables de entorno de functions
Las vars no reservadas (ej. MENTAT_FROM_EMAIL) van en apps/functions/.env
(gitignored). firebase deploy las lee y las aplica a la función. Las reservadas
(FIREBASE_*, X_GOOGLE_*, EVENTARC_*) no se setean ahí. Los secretos
(RESEND_API_KEY, APP_IP_SALT_V1) viven en Secret Manager.
Hosting (la app)
# Mover el .env.local aparte (si existe), limpiar y buildear a mano
mv apps/web/.env.local apps/web/.env.local.bak
rm -rf apps/web/.next apps/web/out
pnpm --filter @mentat/web build # verificá .env.production con USE_FIREBASE_EMULATORS=false
firebase deploy --only hosting --project dawoork-mentat
mv apps/web/.env.local.bak apps/web/.env.local # restaurarEn Windows el predeploy de hosting tampoco matchea el filtro y puede subir un out/
viejo (incluso uno buildeado con USE_EMULATORS=true). Por eso se buildea a mano sin
.env.local. El deploy por GitHub Actions no sufre esto (usa secrets).
Rules e índices
firebase deploy --only firestore:rules,firestore:indexes,storage --project dawoork-mentatPost-deploy (verificar)
Functions
gcloud functions list --project dawoork-mentat → confirmá que están ACTIVE y que
el conteo matchea los exports de apps/functions/src/index.ts.
Rules
Compará la lógica desplegada con el repo (API firebaserules, requiere el header
X-Goog-User-Project).
Hosting
curl -I https://dawoork-mentat.web.app/login → HTTP 200.
Smoke
Una operación real de punta a punta (ej. scripts/pilot/prod-smoke.mjs).
Cada fase se selló con “deploy verificado”: functions:list + rules byte-idénticas
- hosting 200 + un smoke. Mantené esa barra.