{"id":2318,"date":"2023-08-18T21:42:24","date_gmt":"2023-08-19T02:42:24","guid":{"rendered":"https:\/\/creativapixel.com\/?p=2318"},"modified":"2023-08-19T19:44:51","modified_gmt":"2023-08-20T00:44:51","slug":"utilizando-conventional-commit-con-semantic-versioning-una-combinacion-poderosa-para-el-desarrollo-de-software","status":"publish","type":"post","link":"https:\/\/creativapixel.com\/blog\/utilizando-conventional-commit-con-semantic-versioning-una-combinacion-poderosa-para-el-desarrollo-de-software\/","title":{"rendered":"Utilizando Conventional Commit con Semantic Versioning: Una combinaci\u00f3n poderosa para el desarrollo de software"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En el desarrollo de software, es obligatorio contar con herramientas y pr\u00e1cticas que promuevan una comunicaci\u00f3n clara y efectiva en la gesti\u00f3n de versiones. Por lo tanto es necesario conocer Conventional Commit y Semantic Versioning, dos conceptos que se complementan perfectamente para lograr un desarrollo de software m\u00e1s estructurado, trazable y compatible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, Conventional Commit es una convenci\u00f3n de nomenclatura para los mensajes de confirmaci\u00f3n de c\u00f3digo, que establece un formato est\u00e1ndar para su redacci\u00f3n. Proporciona una estructura clara y descriptiva para los mensajes de confirmaci\u00f3n, lo que facilita la interpretaci\u00f3n y el seguimiento de los cambios realizados en un proyecto.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/creativapixel.com\/wp-content\/uploads\/2023\/08\/commit.png\" alt=\"\" class=\"wp-image-2322\" style=\"width:622px;height:157px\" width=\"622\" height=\"157\" srcset=\"https:\/\/creativapixel.com\/blog\/wp-content\/uploads\/2023\/08\/commit.png 678w, https:\/\/creativapixel.com\/blog\/wp-content\/uploads\/2023\/08\/commit-300x76.png 300w\" sizes=\"auto, (max-width: 622px) 100vw, 622px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Asi mismo, Semantic Versioning es un enfoque de numeraci\u00f3n de versiones que se basa en reglas claras y consistentes para asignar versiones a un proyecto de software. Consiste en tres componentes principales: Cambio Major (Mayor), Cambio Minor (Menor) y Cambio Patch (Parche). Cada uno de estos componentes tiene un significado espec\u00edfico y se actualiza seg\u00fan el tipo de cambio realizado en el proyecto.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/creativapixel.com\/wp-content\/uploads\/2023\/08\/versioning.png\" alt=\"\" class=\"wp-image-2325\" style=\"width:439px;height:108px\" width=\"439\" height=\"108\" srcset=\"https:\/\/creativapixel.com\/blog\/wp-content\/uploads\/2023\/08\/versioning.png 791w, https:\/\/creativapixel.com\/blog\/wp-content\/uploads\/2023\/08\/versioning-300x74.png 300w, https:\/\/creativapixel.com\/blog\/wp-content\/uploads\/2023\/08\/versioning-768x188.png 768w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Al combinar Conventional Commit con Semantic Versioning, podemos lograr una gesti\u00f3n de versiones m\u00e1s coherente y comprensible en el desarrollo de software. Les comparto algunos ejemplos (los mas comunes que usamos en nuestro equipo), para utilizar Conventional Commit teniendo en cuenta Semantic Versioning:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo con feat (Caracter\u00edstica)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supongamos que estamos construyendo una aplicaci\u00f3n de gesti\u00f3n de tareas y hemos implementado una nueva caracter\u00edstica o funcionalidad que permite a los usuarios asignar tareas a otros miembros del equipo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git commit -m \"feat(M\u00f3dulo de proyectos): agregar asignaci\u00f3n de tareas a miembros del equipo\n\nHemos a\u00f1adido la funcionalidad que permite a los usuarios asignar tareas a otros miembros del equipo. Esto mejora la colaboraci\u00f3n y la distribuci\u00f3n eficiente de responsabilidades. Aborda la Issue #567.\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, la palabra clave feat se usa para denotar la implementaci\u00f3n exitosa de una nueva caracter\u00edstica en la aplicaci\u00f3n. El mensaje de confirmaci\u00f3n proporciona una descripci\u00f3n clara de lo que se ha hecho y c\u00f3mo beneficia a los usuarios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por lo tanto pasamos de una versi\u00f3n 1.1.0 a 1.2.0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo con fix (Correcci\u00f3n)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso, la palabra clave fix se utiliza para describir una correcci\u00f3n de error. Por lo tanto pasamos de una versi\u00f3n 1.2.0 a 1.2.1:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git commit -m \"fix(M\u00f3dulo de usuarios): solucionar problema con la carga de im\u00e1genes de perfil\n\nSe ha corregido un error en la carga de im\u00e1genes de perfil de usuario que no funcionaba correctamente. Se ha actualizado el punto final de carga de archivos para manejar im\u00e1genes de manera adecuada. Cierra la Issue #456.\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo con Breaking Change (Cambio disruptivo)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La introducci\u00f3n de un nuevo m\u00e9todo de pago y los cambios asociados en la base de datos y la l\u00f3gica de procesamiento son cambios significativos que afectar\u00e1n la funcionalidad existente. En este caso requiere un incremento MAJOR debido a un cambio disruptivo (break):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>feat(M\u00f3dulo de pagos): agregar nuevo m\u00e9todo de pago\n\nHemos agregado un nuevo m\u00e9todo de pago mediante transferencia bancaria. Los usuarios ahora pueden seleccionar esta opci\u00f3n durante el proceso de pago. Sin embargo, esta adici\u00f3n afecta la estructura de la base de datos de pagos y requiere cambios en la l\u00f3gica de procesamiento de pagos existente.\n\nBREAKING CHANGE: Se ha modificado la estructura de la tabla de pagos para incorporar el nuevo m\u00e9todo. Los scripts de migraci\u00f3n deben actualizarse para reflejar esta modificaci\u00f3n. Adem\u00e1s, la l\u00f3gica de procesamiento de pagos se ha actualizado para manejar el nuevo m\u00e9todo de transferencia bancaria.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La secci\u00f3n \u00abBREAKING CHANGE\u00bb resalta que este cambio rompe la compatibilidad con versiones anteriores y requiere un incremento MAJOR en Semantic Versioning. El aumento del n\u00famero de versi\u00f3n resultante MAJOR de 1.2.1 a 2.0.0 indica claramente que se ha producido un cambio disruptivo que requiere atenci\u00f3n por parte de los usuarios y desarrolladores para mantener la funcionalidad y la integridad del sistema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como podemos apreciar los tipos de commits \u00abfeat\u00bb, \u00abfix\u00bb y \u00abbreak\u00bb est\u00e1n directamente relacionados con Semantic Versioning y desempe\u00f1an un papel importante en la determinaci\u00f3n de las versiones sem\u00e1nticas. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otros tipos de commits mas usados y que no afectan el versionamiento, tenemos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo con chore (Tarea de mantenimiento)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginemos que estamos trabajando en un proyecto web y necesitamos actualizar una librer\u00eda de terceros para corregir problemas de seguridad.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git commit -m \"chore(dependencies): actualizar librer\u00eda 'bcrypt' a la \u00faltima versi\u00f3n\n\nHemos actualizado la librer\u00eda 'bcrypt' a su versi\u00f3n m\u00e1s reciente para abordar problemas de seguridad reportados en versiones anteriores. Esto es una tarea de mantenimiento esencial para mantener el proyecto seguro y actualizado.\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo con docs (Documentaci\u00f3n)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para cambios en la documentaci\u00f3n, se usa la palabra clave docs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git commit -m \"docs(readme): actualizar instrucciones de instalaci\u00f3n\n\nSe han actualizado las instrucciones de instalaci\u00f3n en el archivo README para incluir pasos m\u00e1s detallados para configurar el proyecto. Esto ayudar\u00e1 a nuevos colaboradores a ponerse en marcha m\u00e1s f\u00e1cilmente.\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo con style (Estilo)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginemos que estamos trabajando en un proyecto web y queremos mejorar la coherencia en el formato y estilo del c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git commit -m \"style(navbar): corregir formato inconsistente en la barra de navegaci\u00f3n\n\nHemos corregido la sangr\u00eda inconsistente en el c\u00f3digo de la barra de navegaci\u00f3n para mantener un formato limpio y coherente. Esto mejora la legibilidad del c\u00f3digo y facilita futuras revisiones y colaboraciones.\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En todos los ejemplos vale destacar que el cuerpo y el pie son opcionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En conclusi\u00f3n, la combinaci\u00f3n de Conventional Commit y Semantic Versioning es un activo invaluable en el arsenal de cualquier equipo de desarrollo. Estas pr\u00e1cticas brindan orden, coherencia y claridad a trav\u00e9s del ciclo de desarrollo, mejorando la comunicaci\u00f3n, el mantenimiento y la eficiencia en la colaboraci\u00f3n. En \u00faltima instancia, son esenciales para entregar software de calidad en un entorno colaborativo y en constante evoluci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fuentes<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conventional Commit: <a href=\"https:\/\/www.conventionalcommits.org\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.conventionalcommits.org <\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Semantic Versioning: <a href=\"https:\/\/semver.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/semver.org\/ <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el desarrollo de software, es obligatorio contar con herramientas y pr\u00e1cticas que promuevan una comunicaci\u00f3n clara y efectiva en la gesti\u00f3n de versiones. Por lo tanto es necesario conocer &#8230;<\/p>\n","protected":false},"author":1,"featured_media":2328,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[],"class_list":["post-2318","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-metodologias-y-buenas-practicas"],"_links":{"self":[{"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/posts\/2318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/comments?post=2318"}],"version-history":[{"count":10,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/posts\/2318\/revisions"}],"predecessor-version":[{"id":2333,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/posts\/2318\/revisions\/2333"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/media\/2328"}],"wp:attachment":[{"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/media?parent=2318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/categories?post=2318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/creativapixel.com\/blog\/wp-json\/wp\/v2\/tags?post=2318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}