Modelo trunk-based: una sola rama (main). Los pushes desencadenan despliegues automáticos.
| Acción git | Resultado |
|---|---|
Push a main |
Despliegue automático en staging |
Crear tag vMAJOR.MINOR.PATCH (ej. v1.0.0) |
Despliegue en producción |
| Otras ramas / PRs abiertas | Solo CI (lint + test), sin despliegue |
| Archivo | Trigger | Destino |
|---|---|---|
.github/workflows/deploy-staging.yml |
push a main |
Staging completo |
.github/workflows/deploy-production.yml |
tag v*.*.* |
Producción completa |
| Workflows por servicio (storefront, backoffice, product-search, admin-panel) | Disparados desde los principales por afected detection NX | Solo si su código cambió |
NX detecta qué apps están afectadas por el cambio (vía nx affected) y solo despliega esas.
staging: variables y secretos del entorno de staging. Sin revisores requeridos.production: variables y secretos de producción. Con revisores requeridos (regla de protección).Variables de configuración (vars) son públicas en logs. Secretos NO se muestran.
| Categoría | Origen | Dónde se configuran |
|---|---|---|
| AWS OIDC | GitHub asume rol vía OIDC, sin claves | Provider OIDC + role GitHubActionsOIDCRole en AWS |
| Shopify tokens | Custom Apps en cada tienda | GitHub Secrets SHOPIFY_* |
| Sanity tokens | Tokens en project settings de Sanity | GitHub Secrets SANITY_* |
| Email / Klaviyo / Sentry | Cuentas propias | GitHub Secrets correspondientes |
| BD y Redis | RDS / ElastiCache | App Runner environment variables (no GitHub) |
| JWT secrets | Generados manualmente | App Runner environment variables |
nx run-many --target=build --projects=<affected>).typeorm migration:run) contra la BD del entorno.Las migrations de TypeORM viven en apps/backoffice/migrations/.
Se ejecutan antes del deploy de la app.
En producción NO se desactivan: se confía en que las migrations son siempre forward-compatible y reversibles.
Para crear una nueva:
pnpm exec typeorm migration:create apps/backoffice/migrations/MyMigration
Para ejecutar manualmente:
pnpm exec typeorm migration:run -d apps/backoffice/src/config/typeorm.config.ts
| Tipo | Cómo |
|---|---|
| Bug en el código | Crear un tag nuevo apuntando al commit anterior estable: git tag v1.0.1 <hash-anterior> && git push origin v1.0.1 |
| Bug en migration | Crear migration inversa y desplegar |
| Servicio caído | App Runner permite redeploy de versión anterior desde su consola |
| Datos corruptos | Restore de RDS desde snapshot automático (se guardan 7 días) |
| DNS | Cambiar registros en DonDominio. TTL bajo (300s) antes de despliegues grandes |
Se sigue semver:
MAJOR (v1 → v2): breaking changes (cambios en BD que no son backward-compatible, etc.).MINOR (v1.0 → v1.1): features nuevas sin breaking.PATCH (v1.0.0 → v1.0.1): bug fixes.Cada tag debería estar acompañado de un release note en GitHub Releases describiendo qué cambia.
Tras un deploy:
/ de cada servicio./aws/apprunner/<service-name>).| Servicio | Dónde |
|---|---|
| App Runner | AWS Console → App Runner → servicio → Logs → CloudWatch |
| RDS slow queries | CloudWatch Logs /aws/rds/instance/<db>/postgresql |
| Redis | CloudWatch metrics (sin logs por defecto) |
| Sentry | dashboard.sentry.io |
| Cloudfront | Logs deshabilitados por defecto en staging |
# Instalar deps
pnpm install
# Build de todo
pnpm exec nx run-many --target=build
# Solo de una app
pnpm exec nx build storefront
# Tests
pnpm exec nx run-many --target=test
pnpm exec nx run-many --target=lint
Cada app tiene su comando dev:
pnpm exec nx serve storefront # localhost:3000
pnpm exec nx serve backoffice # localhost:3001
pnpm exec nx serve product-search # localhost:3002
Requiere .env.local en cada app con las variables correspondientes. Plantilla en .env.example.
pnpm pinned a 9.15.4 vía packageManager en package.json raíz. NO actualizar a 11.x — rompe los workflows de App Runner (bug TTY).
Corepack automáticamente descarga la versión correcta de pnpm. No hace falta npm install -g pnpm.
OIDC en AWS se restauró en mayo 2026 tras un borrado accidental (Tailor). Si vuelve a desaparecer, recrearlo con:
aws iam create-open-id-connect-provider \
--url https://token.actions.githubusercontent.com \
--client-id-list sts.amazonaws.com \
--thumbprint-list <thumbprint1> <thumbprint2>
Diagrama:
git push main
│
▼
GitHub Actions
│
├── nx affected (detecta apps cambiadas)
│
├── build + lint + test
│
├── docker build & push to ECR
│ (una imagen por app afectada)
│
├── (en producción) requires reviewer approval
│
├── App Runner deploy
│ (1 por app afectada)
│
├── DB migrations
│
├── Sentry release + source maps
│
└── Notificación de éxito/error