¿Cómo funciona husky?

3 minutos de lectura

avatar de usuario de geckos
geckos

https://github.com/typicode/husky tiene la capacidad de ejecutar git hooks automáticamente de manera que puedan compartirse entre equipos en el propio repositorio.

¿Cómo puede funcionar esto? Dado que los ganchos deben estar en .git/hooks que no se agrega al repositorio.

¿Se envuelve? git ordenar e interceptar comandos, ejecutar ganchos cuando suceden?

Quiero reproducir este comportamiento para proyectos python y php sin la necesidad de depender de npm o node.

  • ¿Has mirado el código fuente? No soy un experto en javascript, pero me parece que husky instala los ganchos cuando lo instalas.

    – Roland Smith

    31 de julio de 2019 a las 20:18

  • Estaba intentando eso. En github.com/typicode/husky/blob/…

    – geckos

    31 de julio de 2019 a las 21:44

  • Parece copiar los ganchos en createHook en el enlace de arriba. Esto parece suceder en npm install tiempo en lugar de git clone. Necesitaría algo como esto en un paquete pip o en un paquete composer si quiero que esto se ejecute en un proyecto python o php

    – geckos

    31 de julio de 2019 a las 21:49

avatar de usuario de succerror
éxito

A partir de la versión 5 husky usa git core.hooksPath git config core.hooksPath .husky para ser exacto. esto se hace en husky install paso.

Desde .husky carpeta creada por husky install contiene pre-commit script, se ejecutará antes de la confirmación. Por defecto tendrá npm test en él, pero puede editarlo a su gusto.

Puedes hacer algo similar en cualquier proyecto. Solo agrega .githooks carpeta y enganche los archivos dentro de ella (consulte .git/hooks para ver los archivos de muestra). pero tienes que correr git config core.hooksPath .githooks mientras clona el repositorio (o configura ganchos por primera vez). Puede tener algún script de inicio para hacer eso.
npm tiene scripts.prepare que puede ejecutar comandos en npm install cual es husky install en este caso.

Mientras la dependencia de husky está instalada (a través de npm install, npm add husky, yarn install, …) los hooks de git se crean/actualizan en el directorio .git/hooks. Si el enlace se activa a través de un comando git, se activa un script de husky que ejecutará un comando basado en el administrador de paquetes que usó para la instalación. Si usa npm npx --no-install husky-run $hookName "$gitParams" es ejecutado. Ese comando busca en su configuración y ejecuta el comando definido para el enlace allí.

Es como un proxy para ganchos de git. El proxy se instala una vez y se ejecuta cada vez mediante un git hook normal. Si se ejecuta busca en la configuración y ejecuta los comandos allí definidos.

  • Gracias por tu respuesta. Esto es algo interesante, la instalación de cosas ejecuta código arbitrario, lo cual es un riesgo potencial de seguridad. Pregunté porque traté de reproducir este comportamiento con puro git, pero es imposible. Por fin no puedo encontrar una manera de copiar los ganchos a .git/hooks en el clon, así que los puse en Léame y dejo que el usuario lo instale manualmente. gracias de nuevo

    – geckos

    14 mayo 2020 a las 17:40

  • @geckos: sí, existe un riesgo de seguridad definitivo. Pero, de nuevo: revisar y construir cualquier El software es un riesgo potencial para la seguridad porque casi todos los sistemas de compilación permiten ejecutar comandos externos arbitrarios (es decir, ejecución de código arbitrario). Por lo tanto, no debería crear software que no sea de confianza de todos modos.

    – Joaquín Sauer

    15 oct 2021 a las 13:07

¿Ha sido útil esta solución?