Otimizando o fluxo de trabalho: explorando Git Hooks
o que vamos ver
@allythy
Todos no mesmo lugar
Instalação
Git
O Git é um sistema de controle de versão distribuído, que registra alterações em um arquivo ou conjunto de arquivos ao longo do tempo para que você possa lembrar versões específicas mais tarde.
sudo apt-get install git
Ciclo de vida do git
https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F
Hook em uma tradução literal é gancho, em programação são usados para alterar ou acrescentar algum comportamento, interceptando chamadas de função, mensagens ou eventos passados entre componentes.
O que é um hook ?
O Git usa os hooks para acionar ações em determinados pontos da execução do git
Git Hooks
O Git, nessa situação, se compara ao chef, onde todas as receitas e ingredientes são gerenciados, permitindo que os subchefs colaborem e compartilhem suas criações.
Vamos considerar os hooks do Git como as etapas de verificação de qualidade durante o processo de preparação dos pratos.
git (chef)
pre-commit (chef de qualidade)
pre-push (chef de apresentação)
Image by <a href="https://www.freepik.com/free-vector/hand-drawn-chef-drawingillustration_69225398.htm#from_view=detail_serie">Freepik</a>
Git Hooks
Os hooks são armazenados em um subdiretório no Git. O padrão é:
.git/hooks
applypatch-msg.sample pre-applypatch.sample pre-push.sample update.sample
commit-msg.sample pre-commit.sample pre-rebase.sample
fsmonitor-watchman.sample pre-merge-commit.sample pre-receive.sample
post-update.sample prepare-commit-msg.sample push-to-checkout.sample
git hook em nodejs
Podemos usar qualquer linguagem de script, desde que ela possa ser executada como executável
#!/usr/bin/env node
console.log("hello hook world")
git hook em nodejs
#!/usr/bin/env node
import { readFileSync } from 'fs';
const commitMsgFile = process.argv[2];
const commitMsg = readFileSync(commitMsgFile, 'utf-8').trim();
const allowedPrefix = 'feat';
function startsWithAllowedPrefix(commitMsg) {
const lowerCaseMsg = commitMsg.toLowerCase();
return lowerCaseMsg.startsWith(allowedPrefix);
}
if (!startsWithAllowedPrefix(commitMsg)) {
console.error(`ERRO: A mensagem de commit deve começar com '${allowedPrefix}'`);
process.exit(1);
} else {
process.exit(0);
}
considerações
- Compartilhar os git hook
- Integração com outras ferramentas
- Complexidade
Instalação
Husky
Facilita a execução do git hooks no javacript
npm install --save-dev husky
npx husky init
Instalação
Algumas ferramentas trabalham em conjunto com husky
npm install --save-dev eslint prettier lint-staged @commitlint/{cli,config-conventional}
- eslint - Lint javascript
-
prettier - Formatador javascrit
-
lint-staged - Executa o lint em arquivos na stage do git
-
commitlint - Lint das mensagens commits
Exemplo de uso
Instalação
Docusaurus
Um gerador de site estático. Ele fornece recursos de documentação fácil e simples.
npx create-docusaurus@latest my-website classic
Obrigado
Otimizando o fluxo de trabalho: explorando Git Hooks
By allythy
Otimizando o fluxo de trabalho: explorando Git Hooks
- 131