Chuck's Academy

Git y Github

Automatización con Git hooks

En este módulo, exploraremos los Git hooks, que son scripts que Git ejecuta automáticamente en respuesta a ciertos eventos del repositorio. Los hooks son extremadamente útiles para automatizar tareas como la verificación de código, la ejecución de pruebas, y el despliegue continuo.

¿Qué son los Git hooks?

Los Git hooks son scripts que Git ejecuta automáticamente antes o después de eventos importantes, como commits, pushes y merges. Existen dos tipos principales de hooks:

  • Hooks del lado del cliente: Afectan operaciones locales como commits y merges.
  • Hooks del lado del servidor: Se ejecutan en clave servidor durante operaciones de red como recibir pushes.

Ubicación de los hooks

Los hooks se encuentran en el directorio .git/hooks de tu repositorio. Cada hook es un archivo de script (normalmente Shell, Python, Ruby, etc.) y deben ser ejecutables para que Git los ejecute.

Hooks del lado del cliente

Pre-commit

Se ejecuta antes de que se realice un commit. Puedes usarlo para validar el mensaje del commit, verificar el estilo de código o ejecutar pruebas.

Ejemplo de pre-commit que evita commits con mensajes vacíos:

sh
  1. Crea un archivo llamado pre-commit en el directorio .git/hooks.
  2. Añade el código anterior.
  3. Haz que el script sea ejecutable:
    bash

Commit-msg

Se ejecuta después de que el mensaje del commit se introduce, pero antes de que el commit se complete. Se puede usar para validar el formato del mensaje del commit.

Ejemplo de commit-msg que valida que el mensaje del commit no esté vacío:

sh
  1. Crea un archivo llamado commit-msg en el directorio .git/hooks.
  2. Añade el código anterior.
  3. Haz que el script sea ejecutable:
    bash

Hooks del lado del servidor

Pre-receive

Se ejecuta en el servidor antes de aceptar un push. Útil para validar cambios antes de aceptarlos en el repositorio remoto.

Ejemplo básico de pre-receive:

sh
  1. En el servidor, crea un archivo llamado pre-receive en el directorio hooks de tu repositorio remoto.
  2. Añade el código anterior.
  3. Haz que el script sea ejecutable:
    bash

Post-receive

Se ejecuta después de que los cambios han sido aceptados en el servidor. Útil para despliegue continuo o notificaciones.

Ejemplo de post-receive que despliega el código a un servidor web:

sh
  1. En el servidor, crea un archivo llamado post-receive en el directorio hooks de tu repositorio remoto.
  2. Añade el código anterior.
  3. Haz que el script sea ejecutable:
    bash

Ejemplos prácticos

Hook de pre-commit que verifica el estilo de código con eslint

  1. Primero, instala eslint en tu proyecto:
    bash
  2. Crea el archivo pre-commit en .git/hooks:
    sh
  3. Haz que el script sea ejecutable:
    bash

Hook de post-receive para enviar notificaciones por Slack

  1. Configura el webhook de Slack.
  2. Crea el archivo post-receive en hooks del repositorio remoto:
    sh
  3. Haz que el script sea ejecutable:
    bash

Buenas prácticas

  • Mantén los hooks versionados: Guarda tus scripts de hooks en el repositorio (por ejemplo, en una carpeta .githooks) para que todos los colaboradores puedan acceder a ellos.
  • Documenta tus hooks: Proporciona instrucciones claras sobre cómo instalar y usar los hooks.
  • Pruebas en hooks: Asegúrate de que los scripts en los hooks no introduzcan fallos en tu flujo de trabajo.

Configurar hooks a través de core.hooksPath

Puedes configurar un directorio personalizado para los hooks:

  1. Crea una carpeta para almacenar tus hooks (ejemplo: .githooks).
  2. Mueve tus scripts de hooks a esta carpeta.
  3. Configura core.hooksPath para usar esta carpeta:
    bash

Con estas técnicas y ejemplos, puedes comenzar a automatizar tareas repetitivas e integrar diferentes herramientas en tu flujo de trabajo de desarrollo usando Git hooks. En el próximo módulo, aprenderemos sobre la integración continua con GitHub Actions.


Pregúntame lo que sea