Truco: Añadiendo checks en BAS al invocar commandos GIT

Llega otro truco para BAS y en general, siempre que usamos el cliente de GIT.

En muchas ocasiones me encuentro con la duda de la nomenclatura cuando se hacen commits y lo mas importante, como controlamos que todo el mundo están haciendo commit de manera correcta.

A nivel de servidor GIT podemos añadir comprobaciones que se disparan al hacer un push (subir los cambios al repositorio) pero con esta estrategia podemos tener un problema ya que el desarrollador puede mandar multiples commits y el servidor los rechazará.

Para evitar que el desarrollador mande los commits de manera incorrecta la solución es GIT Hooks

Git Hooks como nos pueden apoyar en la labor de control de cambios. | by  Gabo Mendez | Medium

GIT hook nos permite añadir código para que se ejecute antes de determinados eventos en GIT. En esta entrada veremos lo rápido que es añadir una nueva validación.

Preparación del proyecto

Si nuestro proyecto no tiene todavía git inicializado en la terminal ejecutaremos el comando:

git init

Con este comando tendremos nuestro proyecto listo para usar GIT. Si os fijáis ahora tendremos una nueva estructura de ficheros:

Como podemos ver, se ha creado un ejemplo con todos los eventos disponibles. Los ficheros o eventos estarán deshabilitados gracias a la extensión «.sample»

Activando el evento

Activar el evento es muy sencillo, únicamente hay quitar la extensión del fichero que queramos.

Para este ejemplo usaremos el evento commit-msg que se disparará justo en el momento de hacer commit y nos permitirá verificar el mensaje añadido al commit.

Por lo que vamos a quitar la extensión «.sample» del fichero «commit-msg» mediante botón izquierdo y en el menu «rename».

Este es el resultado:

Añadiendo validación

Lo que haremos en este punto es crear una validación para que nuestro mensaje incluido en el commit lleve un formato como este «[XXX] Esta es la descripción».

Lo primero será acceder al fichero «commit-msg» y borrar el contenido de ejemplo.

Una vez borrado el contenido, añadiremos el siguiente código:

#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="\[[0-9]+\]+"
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
  echo -e "\e[0;31mFormato de mensaje incorrecto: [123] texto libre\e[0;00m"
  exit 1
fi

El script es bastante sencillo, básicamente leemos el parámetro de mensaje del commit y mediante un patron regex validamos si cumple con lo esperado.

En caso que no cumpla, mostramos un mensaje por consola y lo mas importante, paramos el proceso con código de error, en este caso código 1

El resultado

Al intentar hacer un commit, si el mensaje no es correcto, o no sigue la pauta que indicamos, nos mostrará un mensaje y no se realizará los siguientes pasos de commit. En cambio si es correcto, realizaremos el commit sin problema:

  • Ejemplo de mensaje erróneo:
  • Ejemplo con mensaje correcto

Como veis es fácil añadir pre validaciones a nivel local. Pero tiene su limitación y es que los hooks no se suben al repositorio por defecto, por suerte si buscáis un poco por internet veréis que hay una solución fácil, pero esta parte os la dejo a vosotros o quizás mas adelante a otra serie de devops 😉 .

Como siempre suscribete, dale a la campanita de notificaciones y comparte en redes para estar a la última. Vota Like / Dislike para aportar feedback.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.