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
.....
Wait What?
But Why?
But How?
↳ 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
↳ 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...
↳ 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.
✨ Consistência.
✨ Padronização.
✨ Evite o trivial.
✨ Automatize e concentre-se no impactante.
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! ✨