Crear gancho pre-push para pelusa / testing

Me preguntaba cuál es la mejor manera de crear un gancho pre-push (en un repository git) que hace lo siguiente:

  • Ejecute JSHint / JSLint
  • Run Unit y testings funcionales
  • Si todo está bien, acepta la actualización
  • De lo contrario, rechace la actualización

Puede usar un gancho precompromiso de Git para hacer esto. He configurado ganchos de precompromiso para verificar las declaraciones de debugging, etc.

Los ganchos del lado del cliente como este pertenecen a la carpeta .git / hooks. Pero como no puedes comprometer nada en el .git repo con el control de versiones, estás atascado.

Lo que debes hacer entonces es mantener tu command de shell que verifique la corrección en alguna carpeta en tu repository git, por ejemplo, un directory de tools nivel superior.

Luego, "solo" dile a las personas que lo instalen a través de:

 chmod u+x tools/precommit-checks.sh ln -s $PWD/tools/precommit-checks.sh .git/hooks/pre-commit 

y, suponiendo que todo el mundo lo instale, puede tener la verificación como usted lo pide.

Probablemente una mejor manera es simplemente captar este lado del server: tener algún tipo de server de continuous integration que saque los últimos commits de su repository de Github y verifique la base de código.

No, no le dará las capacidades de "denegar un empuje" que le gustaría.

Suponiendo que usted fuera a alojar su git repo usted mismo, también hay otra dificultad: pensé que los ganchos de pre-recepción en el server colgarían a los clientes durante el time que dure el gancho. (Esto está documentado que es cierto para ganchos post-recepción, así que supongo que es cierto aquí también). Entonces, si las testings de CI tardan 2 minutos, algún desarrollador está escribiendo git push y esperando 2 minutos para que su console vuelva a hacer algo.

Entonces, probablemente sea mejor hacer un análisis posterior al envío mediante un server de CI u otras testings de calidad.