Implementación casera de un hook post-create-tag para GIT

Lamentablemente, GIT no dispone de un hook para dicha tarea, por lo que vamos a ver cómo crearlo de forma manual nosotros mismos.

Este script debemos crearlo en el directorio "hooks" de nuestro repositorio con el nombre

post-created-tag

El script hook sería el siguiente

#!/bin/bash

CURRENT_TAGS_FILE="/home/user/git/mirepo.git/hooks/current.tags"
NEW_TAGS_FILE="/home/user/git/mirepo.git/hooks/to.check.tags"
TAG_MATCH_CODE=".+\.protag"

rm ${NEW_TAGS_FILE} 2>/dev/null
git tag > ${NEW_TAGS_FILE}

CREATED_TAG=`diff ${CURRENT_TAGS_FILE} ${NEW_TAGS_FILE} | grep  -E '>.+' | sed 's/> //'`

if `echo ${CREATED_TAG} | grep -E "${TAG_MATCH_CODE}" 1>/dev/null 2>&1`
then
  echo "CREATED NEW MATCHED TAG: ${CREATED_TAG}"
else
  echo "ANY MATCHED TAG CREATED"
fi

git tag > ${CURRENT_TAGS_FILE}
rm ${NEW_TAGS_FILE} 2>/dev/null

Veamos, pues, cómo ponemos a funcionar todo esto. Lo primero es ir al directorio de nuestro repositorio y, en el directorio hook, creamos el fichero que contendrá los tags actuales, necesario para poder comparar después sobre el commit

cd /home/user/git/mirepo.git/hooks/  
git tag > current.tags

El siguiente paso será editar el fichero (o crearlo si no existe)

post-receive

con el contenido

#!/bin/bash  
# Este script comprueba si se han hecho cambios en un directorio concreto,  
# y en tal caso lanza la comprobacion del tag created  
  
sh /home/user/git/mirepo.git/hooks/post-created-tag  

y, por último, damos los permisos necesarios de ejecución

chmod u+x /home/user/git/mirepo.git/hooks/post-created-tag  

Como se puede observar, la implementación que hace el script cuando detecta que se ha creado un tag nuevo está abierta, por lo que será cosa vuestra.

En las primeras líneas del script podemos encontrar algunas constantes

CURRENT_TAGS_FILE="/home/user/git/mirepo.git/hooks/current.tags"
NEW_TAGS_FILE="/home/user/git/mirepo.git/hooks/to.check.tags"
TAG_MATCH_CODE=".+\.protag"

de las que podemos destacar la última, la cual nos indica qué match debe hacer el nuevo tag para disparar los procesos que necesitemos. Esto lo he puesto así ya que, en mi caso, el script hace un despliege en producción y no quiero que lo haga sobre cualquier tag, si no sobre el tag que contenga al final del nombre la palabra

.protag

No obstante, si queremos que se ejecute siempre que se cree un nuevo tag, tenga el nombre que tenga, bastará con poner una expresión regular como

.+

y con esto ya tenemos nuestra propia implementación del hook de creación de tag.

No hay comentarios

Agregar comentario