paint-brush
Comment automatiser les flux de travail Git avec Git Hooks 🚀par@smy
Nouvelle histoire

Comment automatiser les flux de travail Git avec Git Hooks 🚀

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

Trop long; Pour lire

Les hooks Git sont des scripts qui s'exécutent automatiquement chaque fois qu'un événement particulier se produit dans un référentiel Git. Ils vous permettent de personnaliser le comportement interne de Git et de déclencher des actions personnalisables à des moments clés du cycle de vie de développement. Par exemple, vous souhaitez exécuter des vérifications Lint avant que les fichiers ne soient validés, nous utilisons donc le hook de pré-validation.
featured image - Comment automatiser les flux de travail Git avec Git Hooks 🚀
Syed Muhammad Yaseen HackerNoon profile picture
0-item
1-item

Bonjouroooooo !


J'espère que vous allez bien ! C'est SMY ! 👋 Allons-y directement 🚀


....

J'ai mis en place un exemple de hook commit-msg qui à chaque commit


↳ vérifie la convention de nom de succursale, c'est-à-dire [type]/ABC-[ticketnumber]-[objective]


↳ vérifie la convention commit-msg, c'est-à-dire [ABC-ticketnumber] [type] : objectif


↳ vérifie les peluches, est plus joli et exécute des tests unitaires


Lien essentiel : https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f

.....

Contenu:

  • Wait What?
  • But Why?
  • But How?

1️⃣ Quoi -


↳ Les hooks Git sont des scripts qui s'exécutent automatiquement chaque fois qu'un événement particulier se produit dans un référentiel Git.


↳ Ils vous permettent de personnaliser le comportement interne de Git et de déclencher des actions personnalisables à des points clés du cycle de vie de développement.


↳ Il existe des hooks locaux et des hooks côté serveur.

↳ Les hooks locaux s'exécutent sur votre machine et côté serveur sur le référentiel distant.


crochets locaux :


↳ pré-commit ↳ préparer-commit-msg ↳ commit-msg ↳ post-commit ↳ post-checkout ↳ pré-rebase


crochets de serveur :


↳ pré-réception ↳ mise à jour ↳ post-réception


2️⃣ Pourquoi -


↳ Par exemple, vous souhaitez exécuter des vérifications Lint avant que les fichiers ne soient validés, nous utilisons donc le hook de pré-validation.


↳ un autre exemple dans lequel vous souhaitez appliquer le nom de branche standard et la convention commit-msg, nous utilisons donc le hook commit-msg.


↳ et bien plus encore...


3️⃣ Comment -


↳ Pour une configuration facile, dans un projet JavaScript, installez une bibliothèque appelée Husky et suivez la documentation

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


↳ Un exemple est que je souhaite appliquer les noms de branche, la convention de message de validation et exécuter des tests lint, plus jolis et.


↳ Nous pouvons utiliser plusieurs hooks. Dans mon cas, j'ajouterai un hook commit-msg. La raison pour laquelle je n'ai pas choisi le pré-commit est qu'il ne vérifie pas le commit-msg car il s'exécute avant le commit. Je ne veux pas qu'un développeur effectue des vérifications et échoue au message de validation, corrige et réexécute tout. Je veux d'abord vérifier le message de validation.


↳ Créez un hook commit-msg, en suivant la documentation de Husky, et collez l'exemple suivant :


 #!/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


↳ Désormais, chaque fois que vous effectuez un commit, il vérifiera la convention de dénomination des branches et des commits ainsi que des vérifications de charpie. Enfin, il exécutera des tests à la fin, une fois que tout le reste sera prêt.

4️⃣ Résultat -

✨Cohérence.

✨ Normalisation.

✨ Attention au trivial.

✨ Automatisez et concentrez-vous sur l'impact.


Emballer:


Nous venons d'améliorer votre flux de travail de développement avec un Git Hooks. 🚀


.....


Vous pouvez désormais dynamiser votre flux de travail de développement 🚀


C'est tout, les amis ! J'espère que c'était une bonne lecture pour vous. Merci! ✨


👉 Suivez-moi sur GitHub et LinkedIn