Hook pre-commit para validar la calidad de nuestro código.

En la web de Git nos dan esta definición de que es un hook pre-commit:

The pre-commit hook is run first, before you even type in a commit message. It’s used to inspect the snapshot that’s about to be committed, to see if you’ve forgotten something, to make sure tests run, or to examine whatever you need to inspect in the code. Exiting non-zero from this hook aborts the commit, although you can bypass it with git commit --no-verify. You can do things like check for code style (run lint or something equivalent), check for trailing whitespace (the default hook does exactly this), or check for appropriate documentation on new methods.

Sin quitarle la importancia a los entornos de staging, y a los sistemas de integración continua para ejecutar test, los hooks pre-commits nos ayudan a mejorar nuestro código, y evitar posibles errores, en función de que hayamos programado para que se ejecute en los hooks pre-commit.

Concretamente para Drupal tenemos el módulo Coder que nos ayuda a validar mediante Code Sniffer nuestro código, también podéis ver el siguiente vídeo para d7.

Además existe el módulo Drupal Code Quality que mediante una sentencia de Drush instala un hook pre-commit, aquí esta la documentación del módulo. Aunque el módulo es para la versión 7.x sirve también para drupal 8 ya que lo que hace es instalar dos archivos en los hooks de git, el archivo pre-commit es un archivo genérico que indica a git que verifique en el directorio otros archivos llamados "pre-commit_* para ejecutarlos", este archivo esta escrito en php, no en bash. El segundo archivo que instala es post-receive_dcq valida el código siguiendo el codingstandar de Drupal.

Además de los módulos mencionados he encontrado otro scripts
geraldvillorente/drupal-pre-commit que valida que no nos hayamos dejado funciones de debug en nuestros archivos.

Además de esto también se pueden programar scripts para ejecutar test antes de guardar el commit, pero en ese caso con drupal lo mejor puede ser irnos a tomar un café mientras se ejecutan los test.

Mi recomendación es que si es posible tengáis el hook pre-commit correctamente configurado para evitar disgustos mayores, que mejor tardar un poco más cuando se ejecuta un commit que tener que arreglar algo deprisa y corriendo.

Un saludo

Oskar