paint-brush
Como automatizar fluxos de trabalho Git com Git Hooks 🚀por@smy
Novo histórico

Como automatizar fluxos de trabalho Git com Git Hooks 🚀

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

Muito longo; Para ler

Git hooks são scripts executados automaticamente sempre que um evento específico ocorre em um repositório Git. Eles permitem personalizar o comportamento interno do Git e acionar ações personalizáveis em pontos-chave do ciclo de vida de desenvolvimento. Por exemplo, você deseja executar verificações do Lint antes dos arquivos serem confirmados, então usamos o gancho pré-commit.
featured image - Como automatizar fluxos de trabalho Git com Git Hooks 🚀
Syed Muhammad Yaseen HackerNoon profile picture
0-item
1-item

Oláoooo!


Espero que você esteja ótimo! Isso é SMY! 👋 Vamos começar 🚀


....

Eu criei um exemplo de gancho commit-msg que em cada commit


↳ verifica a convenção de nomes de filiais, ou seja, [tipo]/ABC-[número do bilhete]-[objetivo]


↳ verifica a convenção de mensagem de confirmação, ou seja, [ABC-ticketnumber] [type]: objetivo


↳ verifica se há fiapos, fica mais bonito e executa testes de unidade


Link essencial: https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f

.....

Conteúdo:

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

1️⃣ O que -


↳ Git hooks são scripts executados automaticamente sempre que um evento específico ocorre em um repositório Git.


↳ Eles permitem personalizar o comportamento interno do Git e acionar ações personalizáveis em pontos-chave do ciclo de vida de desenvolvimento.


↳ Existem ganchos locais e ganchos do lado do servidor.

↳ Hooks locais são executados em sua máquina e no lado do servidor no repositório remoto.


ganchos locais:


↳ pré-commit ↳ prepare-commit-msg ↳ commit-msg ↳ pós-commit ↳ pós-checkout ↳ pré-rebase


ganchos do servidor:


↳ pré-recebimento ↳ atualização ↳ pós-recebimento


2️⃣ Por que -


↳ Por exemplo, você deseja executar verificações do Lint antes dos arquivos serem confirmados, então usamos o gancho pré-commit.


↳ outro exemplo em que você deseja impor o nome do branch padrão e a convenção commit-msg, então usamos o gancho commit-msg.


↳ e muito mais...


3️⃣ Como -


↳ Para fácil configuração, em um projeto JavaScript, instale uma biblioteca chamada Husky e siga a documentação

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


↳ Um exemplo é que desejo impor nomes de ramificações, confirmar convenções de mensagens e executar lint, mais bonito e testes.


↳ Podemos usar vários ganchos. No meu caso, adicionarei um gancho commit-msg. A razão pela qual não escolhi o pré-commit foi porque ele não verifica o commit-msg enquanto é executado antes do commit. Não quero que um desenvolvedor execute verificações e falhe na mensagem de commit, corrija e execute tudo novamente. Quero verificar primeiro a mensagem de commit.


↳ Crie um gancho commit-msg, seguindo a documentação do Husky, e cole o seguinte exemplo:


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


↳ Agora, sempre que você fizer commit, ele verificará a convenção de nomenclatura de branch e commit junto com a execução de verificações de lint. Por fim, ele fará testes no final, depois que todo o resto estiver pronto.

4️⃣ Resultado -

✨ Consistência.

✨ Padronização.

✨ Evite o trivial.

✨ Automatize e concentre-se no impactante.


Empacotando:


Acabamos de elevar seu fluxo de trabalho de desenvolvimento com Git Hooks. 🚀


.....


Agora você pode turbinar seu fluxo de trabalho de desenvolvimento 🚀


É isso aí, pessoal! Espero que tenha sido uma boa leitura para você. Obrigado! ✨


👉 Siga-me no GitHub e LinkedIn