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