Versionado de Imágenes
VERSIONED_RELEASE.md
¿Qué es Semantic Release?
Semantic Release es una herramienta que automatiza el proceso de versionado y publicación de paquetes basados en el tipo de cambios realizados en el código. Utiliza el sistema de Conventional Commits para determinar el tipo de versión a generar, y asegura que las versiones se incrementen de manera coherente de acuerdo con las reglas semánticas del versionado.
¿Cómo Funciona?
Semantic Release sigue las convenciones de commits para determinar la versión del proyecto. Cuando un commit es realizado en el repositorio, la herramienta analiza el tipo de cambio (añadir una nueva característica, arreglar un error, etc.) y automáticamente calcula la nueva versión. Dependiendo del tipo de cambio, se actualizarán las versiones major, minor o patch.
Tipos de Versiones
- Major (mayor): Se incrementa cuando se realizan cambios incompatibles con versiones anteriores.
- Minor (menor): Se incrementa cuando se agregan características de manera compatible con versiones anteriores.
- Patch (parche): Se incrementa cuando se realizan arreglos de errores compatibles con versiones anteriores.
Convenciones de Commits
El formato de los mensajes de commit debe seguir el estándar de Conventional Commits, lo que permite a Semantic Release analizar los cambios y decidir el tipo de versión que se debe generar.
Un commit debe seguir este formato:
<tipo>(<alcance opcional>): <mensaje de cambio>- tipo: Describe el tipo de cambio realizado (ej.
feat,fix,chore, etc.). - alcance: Es opcional, pero se puede usar para especificar el área del proyecto que se ve afectada por el cambio.
- mensaje de cambio: Una breve descripción de lo que hace el cambio.
Ejemplos de Commits:
feat(cicd): agregar workflows: Se agrega una nueva característica relacionada con los flujos de trabajo CI/CD. Esto incrementa la versión menor.fix(auth): corregir error en la validación de usuario: Se corrige un error. Esto incrementa la versión de parche.chore: actualizar dependencias: Se realizan tareas generales como actualización de dependencias. No incrementa la versión, pero actualiza el changelog.
Plugins en el Workflow de Semantic Release
En el archivo de configuración .github/workflows/release.yml, se utilizan varios plugins para automatizar el proceso de release:
@semantic-release/commit-analyzer: Analiza los commits para determinar el tipo de versión (major, minor, patch).@semantic-release/release-notes-generator: Genera las notas de la nueva versión.@semantic-release/changelog: Actualiza el archivoCHANGELOG.mdcon las nuevas notas de la versión.@semantic-release/git: Realiza commit de los cambios en el changelog y en el archivopackage.json, y los sube al repositorio.@semantic-release/github: Publica un nuevo release en GitHub con los resultados del análisis y las notas.
Flujo de Trabajo
- Se realiza un commit siguiendo las convenciones.
- Al hacer push a la rama
main, se ejecuta el workflow de GitHub Actions. - Semantic Release analiza los commits, determina la nueva versión y actualiza los archivos correspondientes (
CHANGELOG.md,package.json, etc.). - Si todo es correcto, Semantic Release crea un nuevo release en GitHub y actualiza la versión del paquete.
Cómo Corregir Errores Comunes
- Error: EGITNOPERMISSION: Este error ocurre cuando Semantic Release no tiene permisos para hacer push a la rama del repositorio. Asegúrate de que el token de acceso configurado tenga permisos de escritura sobre el repositorio.
- Solución: Revisa la configuración de autenticación en tu CI y asegúrate de que el token tenga los permisos adecuados para hacer push.
- Error en los Commits: Si un commit no sigue la convención, Semantic Release no podrá calcular la versión correctamente.
- Solución: Asegúrate de que todos los commits sigan el formato de Conventional Commits. Puedes usar herramientas como commitizen para facilitar este proceso.