Conventional Commits: Transformando tu Historial Git en una Herramienta Poderosa
¿Qué son los Conventional Commits?
Los Conventional Commits son una especificación para dar estructura a los mensajes de commit. Proporcionan un conjunto sencillo de reglas para crear un historial de commits explícito, lo que facilita la escritura de herramientas automatizadas.
Formato básico
<tipo>[ámbito opcional]: <descripción>
[cuerpo opcional]
[nota(s) al pie opcionales]
Tipos de Commits Principales
feat: Una nueva funcionalidad para el usuario.fix: Corrección de un bug.docs: Solo cambios en documentación.style: Cambios que no afectan el significado del código.refactor: Cambio de código que no corrige un bug ni añade una funcionalidad.test: Añadir tests faltantes o corregir tests existentes.chore: Cambios en el proceso de build o herramientas auxiliares.
Ámbitos (Scopes) Comunes en Android
Los ámbitos ayudan a identificar qué parte del código se ve afectada:
- ui: Cambios en la interfaz de usuario.
- api: Cambios en la capa de API o networking.
- db: Cambios en la base de datos.
- auth: Cambios en autenticación.
- gradle: Cambios en configuración de build.
- manifest: Cambios en AndroidManifest.xml.
Implementación Práctica
1. Configuración de Git Hooks
Podemos usar herramientas como commitizen para forzar el formato:
# Instalar commitizen
npm install -g commitizen
npm install -g cz-conventional-changelog
# Configurar en el proyecto
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
# Usar git cz en lugar de git commit
git cz
2. Automatización con GitHub Actions
name: Validate Commits
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Validate commit messages
uses: wagoid/commitlint-github-action@v5
with:
configFile: .commitlintrc.json
3. Configuración de commitlint
// .commitlintrc.json
{
"extends": ["@commitlint/config-conventional"],
"rules": {
"type-enum": [2, "always", [
"feat", "fix", "docs", "style",
"refactor", "test", "chore", "perf"
]],
"scope-enum": [2, "always", [
"ui", "api", "db", "auth", "gradle",
"manifest", "core", "utils"
]]
}
}
Generación Automática de Changelogs
Una de las mayores ventajas es la generación automática de changelogs:
Con standard-version
# Instalar standard-version
npm install --save-dev standard-version
# Añadir script en package.json
{
"scripts": {
"release": "standard-version"
}
}
# Generar nueva versión y changelog
npm run release
Resultado del changelog generado
# Changelog
## [1.2.0] - 2025-08-22
### Features
* **auth**: add biometric authentication support
* **ui**: implement dark mode theme
* **api**: add offline data synchronization
### Bug Fixes
* **db**: fix memory leak in database connections
* **ui**: resolve crash on device rotation
### Performance Improvements
* **api**: optimize network request caching
Integración con Semantic Release
Semantic Release automatiza todo el proceso de versionado:
// .releaserc.json
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github"
]
}
Commits con Breaking Changes
Para cambios que rompen la compatibilidad:
feat(api)!: change user authentication method
BREAKING CHANGE: The authentication API now requires
OAuth 2.0 instead of API keys. All existing integrations
must be updated to use the new authentication flow.
Beneficios en Proyectos Android
1. Claridad en el historial
El historial de commits se convierte en una documentación viva del proyecto:
- Fácil identificación de nuevas features
- Rápida localización de bug fixes
- Seguimiento de cambios en dependencias
2. Automatización del release
Integración perfecta con Google Play Console:
- Versionado automático de APK/AAB
- Generación de release notes
- Despliegue automatizado a diferentes tracks
3. Mejor colaboración en equipo
Los desarrolladores pueden entender rápidamente:
- Qué cambió y por qué
- Impacto de cada commit
- Historial de decisiones técnicas
Herramientas y Extensiones
- VS Code Extension: Conventional Commits - Autocompletado y validación en tiempo real.
- Android Studio Plugin: Git Commit Template - Templates personalizados para commits.
- Husky + Commitlint - Validación automática antes de cada commit.
Casos de Uso Avanzados
Monorepos con Android
feat(mobile/android): add new payment module
fix(mobile/ios): resolve memory leak in camera
docs(shared/api): update authentication docs
Versionado por módulos
feat(core): add new data encryption utilities
feat(ui-components): implement custom progress bar
fix(networking): resolve timeout issues in HTTP client
Conclusión
Los Conventional Commits transforman la forma en que trabajamos con Git, convirtiendo algo mundano como escribir mensajes de commit en una herramienta poderosa para la automatización y documentación.
En proyectos Android, donde el ciclo de releases es crítico y la colaboración en equipo es esencial, adoptar esta práctica puede marcar la diferencia entre un proyecto caótico y uno bien organizado.