Ir al contenido

Conventional Commits

Conventional Commits es una especificación ligera sobre los mensajes de commit. Proporciona un conjunto de reglas para crear un historial de commits explícito, lo que facilita la escritura de herramientas de automatización.

En HERA, adoptar este estándar es obligatorio porque nos permite:

  • Generar CHANGELOGs automáticamente.
  • Determinar el versionamiento semántico (SemVer) de forma automática con cada release.
  • Comunicar la naturaleza de los cambios a compañeros de equipo, público y otros stakeholders.
  • Disparar procesos de build y despliegue de forma predecible.

El formato de un commit convencional es simple:

<type>[optional scope]: <description>
[optional body]
[optional footer(s)]

Define la categoría del cambio. Estos son los tipos permitidos en HERA:

TipoTítuloDescripción
featFeaturesUna nueva funcionalidad para el usuario.
fixBug FixesUna corrección de un bug en producción.
docsDocumentationCambios que solo afectan a la documentación.
styleStylesCambios que no afectan el significado del código (espacios, formato, etc).
refactorCode RefactoringUn cambio en el código que no corrige un bug ni añade una funcionalidad.
perfPerformanceUn cambio que mejora el rendimiento.
testTestsAñadir tests que faltan o corregir tests existentes.
buildBuild SystemCambios que afectan el sistema de build o dependencias externas.
choreChoresOtros cambios que no modifican el código src o de test.
revertRevertsRevierte un commit anterior.

El ámbito proporciona información contextual adicional. Es una palabra entre paréntesis después del tipo, que describe la sección del código afectada.

feat(auth): add password reset functionality
fix(checkout): validate credit card number
test(api): add integration tests for user endpoint

Es un resumen corto del cambio de código.

  • Usa el imperativo, tiempo presente: “add” no “added” ni “adds”.
  • No capitalices la primera letra.
  • Sin punto (.) al final.
✅ fix(login): redirect user on session timeout
❌ Fixed the login redirection issue.

El cuerpo del mensaje es para proporcionar contexto adicional sobre el cambio. Explica el “qué” y el “por qué”, no el “cómo”.

El pie se usa para referenciar IDs de seguimiento de issues (como Jira) o para declarar BREAKING CHANGES.


Un cambio que rompe la compatibilidad con versiones anteriores DEBE indicarse en el pie del commit. Un BREAKING CHANGE puede ser parte de commits de cualquier type.

Debe empezar con el texto BREAKING CHANGE: seguido de una descripción de lo que ha cambiado.

feat: change user ID from number to UUID
BREAKING CHANGE: The `id` field on the User model is now a UUID string
instead of an auto-incrementing integer. All services consuming the
User API must be updated to handle UUIDs.

Alternativamente, se puede usar un ! después del tipo/ámbito para llamar la atención sobre el breaking change: feat(api)!: ...


La principal ventaja de usar Conventional Commits es que nos permite automatizar el versionamiento.

  • fix se correlaciona con PATCH en SemVer. (ej. 1.2.3 → 1.2.4)
  • feat se correlaciona con MINOR en SemVer. (ej. 1.2.3 → 1.3.0)
  • BREAKING CHANGE (o un ! después del tipo) se correlaciona con MAJOR en SemVer. (ej. 1.2.3 → 2.0.0)