Ícono del sitio Erick Daniel en la nube

Gestión de Releases en GitHub

¿Qué es un Release en GitHub?

En GitHub podemos empaquetar software, en donde podemos incluir archivos binarios y notas para indicar a la gente como usarlo, esto es fundamental en el proceso de software, ya nuestro principal objetivo como desarrolladores es construir software que sea desplegable en cada una de las iteraciones y ponerlo disponible al negocio para que lo use.

Básicamente los Release en GitHub usan tags, los cuales marca un punto en específico de la historia de tu repositorio, entonces te preguntaras, como creo un tag asociado a un commit en GitHub, pues lo veremos a continuación.

Entendiendo como gestionar los Releases en el Gitflow

Si usamos la estrategia de branching de gitflow, estaremos familiarizados de como integrar el concepto de Release al momento de liberar código. Dentro del proceso de desarrollo existen distintos momentos en los cuales podemos generar un nuevo Release:

Puntos de creación de un Release en la estrategia de ramas

Una de las practicas más usadas para determinar que funcionalidad usaremos en cada commit es el Cherry pick, este tema lo abordaremos en artículos subsecuentes.

¿Como distinguimos de un Release a otro?, a través de tags. Un tag expresa una versión en particular y la siguiente tabla expresa de forma adecuada como ir asignando la nomenclatura de forma correcta.

Tabla de semantica de releases

El ejemplo que vamos a revisar está basado en este repo de GitHub, el cual puedes crear una copia usando el template que está disponible (no olvides dar check en incluir todas las ramas).

Creación de nuestro primer Release no productivos

Existen casos en los cuales necesitamos crear pre-releases para exponer funcionalidades de forma anticipada y tener feedback de nuestros usuarios; para esto vamos al repositorio, en el panel lateral derecho se puede observar la sección de Releases, vamos a dar clic en “Create a new Release”.

Página principal del repositorio, sección de creación de Releases

Es aquí donde vamos a crearlo siguiendo los siguientes pasos:

  1. Establecer el tag, si no existe lo creamos.
  2. Especificamos la rama, en este punto es importante solo seleccionar ramas que estén protegidas y que puedan gestionar de forma adecuada una versión del nuestros aplicativos.
  3. Especificamos el título del Release
  4. En caso de usar la información de los Pull Request a estas ramas para describir el Release damos clic en el botón de “Generate Release Notes
  5. Escribimos/editamos la descripción del Release
  6. En este caso no vamos a agregar binarios, sin embargo, puedes agregarlos en la sección de “attach binaries”
  7. En caso de ser un pre-release activamos la casilla “This is a pre-relase”
  8. Damos clic en “Publish release”
Pantalla de creación de Release

Tenemos ya nuestro primer pre-release, algo interesante que podemos ver es que tenemos acceso directo al código fuente, el commit relacionado y el tag correspondiente.

Detalle de Release

Para cada nuevo Release es recomendable crear una rama por Release y protegerlas con “Branch policies”; sin embargo, esto no limita que uses otras estrategias de ramas que se adecuen mejor a tu proceso de desarrollo.

Protección de ramas

Como mencionaba anteriormente uno de los principales mecanismos para resguardar el código que es susceptible a ser desplegado en la nuble, es crear reglas de protección de ramas para esto vamos a al sitio de GitHub, en el repositorio damos clic en “Settings”, posteriormente en el panel lateral izquierdo en la sección de “Code and automation” damos clic en “Branches”, y en la sección de “Branch protection rules” damos clic en el botón “add branch protection rule”

Pantalla de configuración de reglas de protección de ramas – GitHub

Procedemos a especificar la rama que protegeremos en el campo de “Branch name pattern” en nuestro caso es main; posteriormente activamos las siguientes opciones:

Damos clic en el botón de “Create”.

Creación de branch protection rule para la rama main

Hacemos lo mismo ahora para proteger todas las ramas de release, para esto en el Branch name pattern “release/*”

Creación de branch protection rule para las ramas de release

Creación de un Release por nuevo feature

El escenario que veremos a continuación es cuando necesitamos integrar un nuevo feature a nuestra solución, para esto creamos una nueva rama, donde actualizaremos una hoja de estilo, para esto vamos a la sección de “code”, en la rama main tecleamos el nombre nuestra rama “feature-css-update” y vamos a dar clic en “Create branch: feature-css-update from ‘main’”.

Creación de rama “feature-css-update”

Vamos al archivo “base.css” y realizamos la modificación en el elemento “body -> background-color: black” y damos clic en “commit”.

Cambio en archivo CSS

Ahora vamos a generar un pull Request para integrar nuestros cambios a la rama de “release/release-v1.0”, vamos a la sección de “Pull Request”, después damos clic en “New Pull Request”, seleccionamos la rama base en este caso “release/release-v1.0” y en la rama a comparar “feature-css-update”, agregamos el titulo y la descripción de los cambios que integraremos a través del Pull Request. Damos clic en “Create pull Request”

Creación del Pull Request del feature branch a la rama de Release

Aprobamos el Pull Request y le damos clic en “Merge Pull Request”.

Aprobación del Pull Request

Una vez integrados los cambios procedemos a eliminar la rama, damos clic en “Delete Branch”

Eliminación de la rama de feature

Ahora que ya tenemos nuestros cambios en la rama release, en un proceso de desarrollo real podría desplegarse en algún ambiente intermedio, y una vez realizadas pruebas de diversa índole (carga, aceptación, integración, etc.), seguiría su integración en la rama productiva.

Vamos a crear un pull Request de la rama de release a la rama main. Damos clic en la sección de “Pull Request”, después damos clic en “New Pull Request”, seleccionamos la rama base en este caso “main” y en la rama a comparar “release/release-v1.0”, agregamos el titulo y la descripción de los cambios que integraremos a través del Pull Request y damos clic en “Create pull Request”

Creación del Pull Request hacia main

Aprobamos el Pull Request y le damos clic en “Merge pull Request”.

Aprobación del Pull Request hacia main

Ahora que ya tenemos nuestros cambios en la rama main, vamos a crear el release de la versión 1.0.0; para esto regresamos a la sección de “Code”, “Releases” una vez que ya estamos ahí damos clic en el botón “Draft a new release”.

Panel de gestión de Releases

Creamos un nuevo draft release y especificamos la siguiente información:

  1. Establecemos el tag en V1.0.0
  2. Especificamos la rama “release/release v1”
  3. Especificamos el título del Release que este caso es V1.0.0
  4. Clic en el botón de “Generate Release Notes
  5. Escribimos/editamos la descripción del Release
  6. Damos clic en “Save Draft”
Creación de Draft Release

Ahora como guardamos el Release solo como un draft, podemos editarlo, vamos la sección de Release, en el Release que queremos editar damos clic en el botón de editar en la parte superior derecha. Ya estando en el formulario, cambiamos la rama objetivo a main y le damos clic en “Publish release”

Edición de release draft

Ya se encuentra asociada la rama main con la etiqueta de forma correcta.

Publicación de Release v1.0.0

Creación de un Release por Hotfix

En el caso de que se realice un hotfix creamos una rama independiente llamada “hotfix-v1.0.1”, hacemos la corrección, commit y la integramos a la rama main a través de un Pull Request.

Pull Request de rama de Hotfix a main

Ahora que ya está integrado podemos crear nuestro Release, especificamos la siguiente información:

  1. Establecemos el tag en V1.0.1
  2. Especificamos la rama “main
  3. Especificamos el título del Release que este caso es V1.0.1
  4. Clic en el botón de “Generate Release Notes
  5. Escribimos/editamos la descripción del Release
  6. Damos clic en “Publish Release”
Creación de Release asociado a un Hotfix

Ahora podemos visualizar nuestro nuevo Release resultado de un hotfix.

Release Hotfix

Comparación de Releases

Uno de los puntos importantes es el de comparar los Release para determinar los cambios que hay entre una y otra. Para esto podemos ir al Release del cual queremos iniciar la comparación, dar clic en el botón de compare y seleccionar el tag objetivo.

Comparación de 2 Releases

Esto nos muestras los commits adicionales que se integran diferentes con la posibilidad de visualizar los archivos y contribuidores.

Pantalla de comparación de Commits

Esto fue todo por hoy espero que te haya gustado este articulo y te sea de mucha utilidad, puedes ver más contenido que estaré generando en este medio.

¡Saludos y disfruta estar en la nube!

Salir de la versión móvil