paint-brush
Cómo automatizar los flujos de trabajo de Git con Git Hooks 🚀por@smy
Nueva Historia

Cómo automatizar los flujos de trabajo de Git con Git Hooks 🚀

por Syed Muhammad Yaseen4m2024/07/30
Read on Terminal Reader

Demasiado Largo; Para Leer

Los ganchos de Git son scripts que se ejecutan automáticamente cada vez que ocurre un evento particular en un repositorio de Git. Le permiten personalizar el comportamiento interno de Git y activar acciones personalizables en puntos clave del ciclo de vida del desarrollo. Por ejemplo, desea ejecutar comprobaciones de Lint antes de que se confirmen los archivos, por lo que utilizamos el gancho de confirmación previa.
featured image - Cómo automatizar los flujos de trabajo de Git con Git Hooks 🚀
Syed Muhammad Yaseen HackerNoon profile picture
0-item
1-item

¡Holaaaaaaa!


¡Espero que estés muy bien! ¡Esto es SMY! 👋 Saltemos directamente 🚀


....

He configurado un gancho de mensaje de confirmación de ejemplo que en cada confirmación


↳ comprueba la convención de nombres de sucursales, es decir, [tipo]/ABC-[número de billete]-[objetivo]


↳ comprueba la convención de mensaje de confirmación, es decir, [número de billete ABC] [tipo]: objetivo


↳ comprueba si hay pelusas, es más bonito y ejecuta pruebas unitarias


Enlace esencial: https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f

.....

Contenido:

  • ⚡Espera Wait What?
  • But Why?
  • But How?

1️⃣ ¿Qué?


↳ Los ganchos de Git son scripts que se ejecutan automáticamente cada vez que ocurre un evento particular en un repositorio de Git.


↳ Le permiten personalizar el comportamiento interno de Git y activar acciones personalizables en puntos clave del ciclo de vida del desarrollo.


↳ Hay ganchos locales y ganchos del lado del servidor.

↳ Los enlaces locales se ejecutan en su máquina y en el lado del servidor en el repositorio remoto.


ganchos locales:


↳ pre-compromiso ↳ preparar-compromiso-msg ↳ confirmar-msg ↳ post-compromiso ↳ post-pago ↳ pre-rebase


ganchos del servidor:


↳ pre-recibir ↳ actualizar ↳ post-recibir


2️⃣ Por qué -


↳ Por ejemplo, desea ejecutar comprobaciones de Lint antes de que se confirmen los archivos, por lo que utilizamos el gancho de confirmación previa.


↳ otro ejemplo en el que desea aplicar el nombre de rama estándar y la convención commit-msg, por lo que usamos el enlace commit-msg.


↳ y mucho más...


3️⃣ Cómo -


↳ Para una configuración sencilla, en un proyecto de JavaScript, instale una biblioteca llamada Husky y siga la documentación

https://www.npmjs.com/package/husky


↳ Un ejemplo es que quiero hacer cumplir los nombres de las ramas, confirmar la convención de mensajes y ejecutar lint, prettier y pruebas.


↳ Podemos utilizar múltiples ganchos. En mi caso, agregaré un enlace commit-msg. La razón por la que no elegí la confirmación previa fue que no verifica el mensaje de confirmación cuando se ejecuta antes de la confirmación. No quiero que un desarrollador ejecute comprobaciones y falle al confirmar el mensaje, corregirlo y ejecutarlo todo nuevamente. Primero quiero comprobar el mensaje de confirmación.


↳ Cree un enlace commit-msg, siguiendo la documentación de Husky, y pegue el siguiente ejemplo:


 #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # Checks for branch name currentBranch=$(git rev-parse --abbrev-ref HEAD) requiredPattern="^(build|chore|feat|docs|refactor|perf|test)/ABC-\d+-.+$" if ! echo "$currentBranch" | grep -qE $requiredPattern; then echo "\nInvalid branch name: $currentBranch" echo "-" echo "Should follow this pattern: build|chore|feat|docs|refactor|perf|test/ABC-ticketnumber-any-text" echo "-" echo "example: docs/ABC-123-update-readme.md" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 # Branch name doesn't match the pattern, exit with error code fi # Checks for commit message commit_message="$(cat "$1")" pattern='^\[ABC-[0-9]+\] (build|chore|feat|docs|refactor|perf|test): .+$' if [[ ! $commit_message =~ $pattern ]]; then echo "\nInvalid commit message: $commit_message" echo "-" echo "Should follow this pattern: [ABC-ticketnumber] build|chore|feat|docs|refactor|perf|test: objective" echo "-" echo "example: [ABC-15] chore: updated .gitignore" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 fi # npx lint-staged -- uncomment when have lint setted up # npm run test -- uncomment when have test setted up


↳ Ahora, cada vez que realice una confirmación, verificará la rama y confirmará la convención de nomenclatura junto con la ejecución de comprobaciones de pelusa. Finalmente, ejecutará pruebas al final, después de que todo lo demás esté listo.

4️⃣ Resultado -

✨Consistencia.

✨Estandarización.

✨ Olvídate de lo trivial.

✨ Automatiza y céntrate en lo impactante.


Terminando:


Acabamos de mejorar su flujo de trabajo de desarrollo con Git Hooks. 🚀


.....


Ahora puedes potenciar tu flujo de trabajo de desarrollo 🚀


¡Eso es todo, amigos! Espero que haya sido una buena lectura para ti. ¡Gracias! ✨


👉 Sígueme en GitHub y LinkedIn