Docs

Versionado y Gitflow

Sistema de versionado semántico, estructura de ramas y flujo de trabajo para el ecosistema Nvito.

PublicadoMarzo 2026Equipo de desarrollo, colaboradores

1. Importancia del versionado

Sin un sistema de versionado formal, surgen problemas recurrentes que afectan la velocidad y la confiabilidad del equipo:

  • No hay trazabilidad: es imposible saber qué versión corre en cada ambiente, ni qué cambios incluye.
  • No hay control de releases: cualquier push puede llegar a producción sin un punto de corte claro.
  • Rollbacks a ciegas: sin tags ni versiones, revertir un deploy implica buscar commits manualmente.
  • Comunicación ambigua: frases como "ya está el fix" no dicen nada sobre qué ambiente ni qué versión.

Al adoptar versionado semántico y un flujo de ramas estructurado, el equipo obtiene:

  • Trazabilidad completa: cada ambiente tiene una versión concreta asociada a un tag de Git.
  • Comunicación clara: "la versión 0.9.1 ya está en TEST" es una afirmación verificable.
  • Rollback controlado: revertir es tan simple como desplegar el tag anterior.
  • Historial auditable: cada release queda documentada con su tag, su rama y sus cambios.

2. Semantic Versioning

Nvito utiliza Semantic Versioning 2.0.0 (MAJOR.MINOR.PATCH) con reglas adaptadas al ecosistema:

Reglas de incremento

ComponenteCuándo incrementarEjemplo
MAJORBreaking changes, rediseño de API, cambio de contrato incompatible. 1.0.0 marca el lanzamiento a producción.0.9.01.0.0 (lanzamiento oficial)
MINORNuevo endpoint, nueva pantalla, nueva funcionalidad, nuevo módulo. Compatible hacia atrás.0.9.00.10.0 (nuevo módulo de pagos)
PATCHBug fix, ajuste de estilos, refactor sin cambio funcional, corrección de typos.0.9.00.9.1 (fix en timezone de RSVP)

Ejemplos concretos de Nvito

CambioTipoVersión
Agregar endpoint POST /events/:id/addonsMINOR0.9.00.10.0
Corregir cálculo de capacidad de invitadosPATCH0.9.10.9.2
Rediseñar la estructura de respuesta del API de invitacionesMAJOR0.9.01.0.0
Agregar pantalla de galería en la PWAMINOR0.3.00.4.0
Ajustar padding en el badge de ambientePATCH0.8.00.8.1
Refactorizar servicio de notificaciones (SRP split)PATCH0.9.00.9.1

Mientras la versión sea 0.x.y, el API se considera inestable y los cambios de MINOR pueden incluir ajustes de contrato sin considerarse breaking. A partir de 1.0.0, los contratos son estables.

3. Versiones actuales

RepositorioVersiónDescripción
nvito-api0.9.0Backend NestJS — 374 endpoints
nvito-admin0.8.0Dashboard administrativo Next.js
nvito-invitations0.7.0Invitaciones públicas SSG/ISR
nvito-client0.5.0App móvil React Native + Expo
nvito-pwa0.3.0Progressive Web App (BFF)
nvito-landing0.2.0Landing page Astro

Todas las versiones son pre-1.0.0, lo que indica que el ecosistema está en desarrollo activo previo al lanzamiento a producción.

4. Estructura de ramas (Gitflow)

Tipos de rama

RamaPropósitoOrigenDestinoProtegida
mainProducción estable. Solo recibe merges de release/* y hotfix/*.
developIntegración continua. Auto-deploy a DEV.main
feature/*Nuevas funcionalidades. Naming en kebab-case.developdevelopNo
fix/*Corrección de bugs no urgentes.developdevelopNo
refactor/*Refactorización sin cambio funcional.developdevelopNo
release/X.Y.ZPreparación de release. Bump de versión y QA.developtestmainNo
hotfix/X.Y.ZFixes urgentes sobre producción.mainmain + developNo

Reglas de protección

  • main y develop son ramas protegidas: no se permite push directo.
  • Todo cambio llega vía merge request (MR) desde ramas de trabajo.
  • Las ramas feature/*, fix/* y refactor/* se eliminan después del merge.

5. Mapeo de ramas a ambientes

RamaAmbienteURLsDeploy
developDEVdev-api.nvito.mx, dev-admin.nvito.mx, dev-app.nvito.mxAutomático (Coolify webhook)
testTESTtest-api.nvito.mx, test-admin.nvito.mx, test-app.nvito.mxAutomático (Coolify webhook)
mainPRODapi.nvito.mx, admin.nvito.mx, app.nvito.mxAutomático (futuro)

La rama test se mantiene como puente fijo para Coolify. Las ramas release/X.Y.Z se mergean a test para disparar el deploy automático al ambiente TEST. No se hace desarrollo directo en test.

Flujo de promoción entre ambientes

feature/* → develop → DEV (automático)

         release/X.Y.Z → test → TEST (automático)

                              main → PROD (automático, futuro)

6. Flujo de release

Pasos del flujo

  1. Crear rama de release: git checkout -b release/X.Y.Z develop
  2. Bump de versión: actualizar version en package.json de cada repositorio modificado.
  3. Commit de versión: git commit -m "release: bump version to X.Y.Z"
  4. Merge a test: git checkout test && git merge release/X.Y.Z → deploy automático a TEST.
  5. QA y verificación: el equipo valida funcionalidad en el ambiente TEST.
  6. Si hay bugs: corregir en la rama release/X.Y.Z, repetir desde el paso 4.
  7. Merge a main: git checkout main && git merge release/X.Y.Z + crear tag vX.Y.Z.
  8. Merge de vuelta: git checkout develop && git merge release/X.Y.Z para sincronizar.
  9. Limpiar: eliminar la rama release/X.Y.Z.

Comandos del flujo completo

# 1. Crear rama de release desde develop
git checkout develop
git pull origin develop
git checkout -b release/0.9.1

# 2-3. Bump de versión y commit
# (El agente nvito-version-bumper lo hace automáticamente)
npm version 0.9.1 --no-git-tag-version
git add package.json
git commit -m "release: bump version to 0.9.1"

# 4. Merge a test para deploy a TEST
git checkout test
git pull origin test
git merge release/0.9.1
git push origin test

# 5-6. QA en TEST... si hay fixes, hacerlos en release/0.9.1 y repetir

# 7. Merge a main y tag
git checkout main
git pull origin main
git merge release/0.9.1
git tag -a v0.9.1 -m "Release 0.9.1"
git push origin main --tags

# 8. Merge de vuelta a develop
git checkout develop
git merge release/0.9.1
git push origin develop

# 9. Limpiar
git branch -d release/0.9.1
git push origin --delete release/0.9.1

7. Flujo de hotfix

Cuando se detecta un bug crítico en producción que no puede esperar al siguiente release:

Pasos

  1. Crear rama de hotfix: git checkout -b hotfix/X.Y.Z main
  2. Corregir el bug: implementar la corrección mínima necesaria.
  3. Bump de versión PATCH: incrementar solo el tercer número.
  4. Merge a main + tag: git merge hotfix/X.Y.Z + git tag vX.Y.Z.
  5. Merge a develop: sincronizar la corrección con la rama de integración.

Comandos

# 1. Crear hotfix desde main
git checkout main
git pull origin main
git checkout -b hotfix/0.9.2

# 2. Corregir el bug
# ... implementar fix ...

# 3. Bump versión
npm version 0.9.2 --no-git-tag-version
git add package.json
git commit -m "hotfix: fix critical RSVP timezone calculation"

# 4. Merge a main
git checkout main
git merge hotfix/0.9.2
git tag -a v0.9.2 -m "Hotfix 0.9.2 — fix RSVP timezone"
git push origin main --tags

# 5. Merge a develop
git checkout develop
git merge hotfix/0.9.2
git push origin develop

# Limpiar
git branch -d hotfix/0.9.2
git push origin --delete hotfix/0.9.2

Un hotfix siempre incrementa solo el PATCH. Si el fix requiere cambios significativos, debe hacerse como release normal desde develop.

8. Ciclo de vida de una versión

Cada versión pasa por cuatro estados:

EstadoDescripciónAmbienteQuién valida
DraftLa versión se crea con el bump en package.json. Existe solo en la rama.Desarrollador
En DEVLa versión se despliega automáticamente al ambiente de desarrollo.DEVEquipo de desarrollo
En TESTLa versión se despliega al ambiente de QA para validación formal.TESTQA + stakeholders
ProducciónLa versión se despliega a producción con su tag vX.Y.Z.PRODUsuarios finales

Transiciones

  • Draft → En DEV: automático al hacer push a develop.
  • En DEV → En TEST: manual al mergear release/X.Y.Z a test.
  • En TEST → Producción: manual al mergear a main después de aprobación de QA.
  • En TEST → En DEV (rollback): si se encuentra un bug, se corrige y se re-despliega.

9. Naming conventions

ElementoFormatoEjemplo
Feature branchfeature/descripcion-kebabfeature/guest-capacity-bar
Fix branchfix/descripcion-kebabfix/rsvp-timezone-offset
Refactor branchrefactor/descripcion-kebabrefactor/notification-channels-srp
Release branchrelease/X.Y.Zrelease/0.9.1
Hotfix branchhotfix/X.Y.Zhotfix/0.9.2
Tag de versiónvX.Y.Zv0.9.1
Commit de releaserelease: bump version to X.Y.Zrelease: bump version to 0.9.1
Commit de hotfixhotfix: descripción cortahotfix: fix critical RSVP timezone calculation
Commit de featurefeat: descripción cortafeat: add guest capacity bar component
Commit de fixfix: descripción cortafix: correct timezone offset in RSVP
Commit de refactorrefactor: descripción cortarefactor: split notification service (SRP)

Los nombres de rama siempre usan kebab-case en la parte descriptiva. Nunca usar camelCase, PascalCase ni espacios.

10. Agente nvito-version-bumper

El ecosistema Nvito cuenta con un agente automático que gestiona el versionado de forma inteligente:

Funcionamiento

  1. Se ejecuta al pre-cierre de cada sesión de desarrollo como parte del flujo de agentes.
  2. Analiza los cambios realizados en la sesión: archivos modificados, tipos de commit, módulos afectados.
  3. Determina automáticamente el tipo de incremento:
    • Nuevos archivos de servicio, controlador o pantalla → MINOR
    • Modificaciones a archivos existentes sin cambio de API → PATCH
    • Cambios en contratos de API o modelos de datos → potencial MAJOR
  4. Actualiza package.json de cada repositorio modificado en la sesión.
  5. MAJOR siempre requiere confirmación explícita del usuario antes de aplicarse.

Criterios de decisión

IndicadorTipoJustificación
Nuevo endpoint en controllerMINORNueva funcionalidad expuesta
Nuevo componente de pantallaMINORNueva funcionalidad visible
Nuevo módulo NestJSMINORNueva capacidad del sistema
Fix en servicio existentePATCHCorrección sin cambio de interfaz
Refactor de código internoPATCHSin impacto funcional
Ajuste de estilos CSSPATCHSin impacto funcional
Cambio en DTO existente (breaking)MAJORRompe contratos existentes
Migración de BD con columnas eliminadasMAJORCambio destructivo

El agente nunca aplica un incremento MAJOR sin confirmación. Si detecta un posible breaking change, presenta los cambios al usuario y solicita aprobación explícita.

11. Badge de ambiente en el admin

El dashboard administrativo (nvito-admin) muestra un badge de ambiente en el header que indica el ambiente actual y la versión desplegada.

Comportamiento

  • Solo visible en ambientes no-producción: LOCAL, DEV y TEST. En producción no se muestra.
  • Muestra el nombre del ambiente más la versión actual del package.json.
  • Click para ver detalles: al hacer click, despliega un popover con versión, ambiente y URL del API.

Colores por ambiente

AmbienteColorCódigoEstilo
LOCALGrisFondo gris con borde punteado
DEVAzul complementario#005587Fondo sólido con texto blanco
TESTNaranja#F17F3AFondo sólido con texto blanco
PRODNo se muestra badge

Configuración

La variable de entorno que controla el ambiente es:

NEXT_PUBLIC_APP_ENV=local   # local | dev | test | production

La versión se inyecta automáticamente desde package.json en build time, lo que garantiza que siempre refleja la versión exacta del código desplegado.

// next.config.ts (simplificado)
const packageJson = require('./package.json');

const nextConfig = {
  env: {
    NEXT_PUBLIC_APP_VERSION: packageJson.version,
  },
};

12. Referencia rápida

Comandos más usados

AcciónComando
Crear featuregit checkout -b feature/mi-feature develop
Crear fixgit checkout -b fix/mi-fix develop
Crear releasegit checkout -b release/X.Y.Z develop
Crear hotfixgit checkout -b hotfix/X.Y.Z main
Bump de versiónnpm version X.Y.Z --no-git-tag-version
Crear taggit tag -a vX.Y.Z -m "Release X.Y.Z"
Push con tagsgit push origin main --tags
Ver tagsgit tag --list 'v*' --sort=-version:refname
Ver versión actualnode -p "require('./package.json').version"

Checklist de release

  • Todos los tests pasan en la rama release/X.Y.Z
  • Build exitoso sin errores de TypeScript
  • Versión actualizada en package.json
  • Commit de release con formato release: bump version to X.Y.Z
  • Merge a test exitoso, deploy verificado en TEST
  • QA aprobado en ambiente TEST
  • Merge a main realizado
  • Tag vX.Y.Z creado y pusheado
  • Merge de vuelta a develop completado
  • Rama release/X.Y.Z eliminada (local y remota)

Checklist de hotfix

  • Bug crítico confirmado en producción
  • Rama hotfix/X.Y.Z creada desde main
  • Corrección implementada y testeada
  • Versión PATCH incrementada
  • Merge a main + tag vX.Y.Z
  • Merge a develop para sincronizar
  • Rama hotfix/X.Y.Z eliminada
Esta pagina fue util?