Pular para o conteúdo

Pre-commit Hooks

Execute as verificações de conformidade com ADRs do Archgate antes de cada commit com hooks nativos do git ou um gerenciador de hooks. Pegue violações de arquitetura antes que cheguem ao CI.

Um pre-commit hook executa archgate check --staged antes de cada commit, de modo que as violações de arquitetura são pegas na máquina do desenvolvedor — antes que cheguem a um pull request. Como --staged verifica apenas os arquivos na área de staging do git, o hook se mantém rápido o suficiente para o uso diário.

Este guia mostra a abordagem com hook nativo do git, além dos dois gerenciadores de hooks comuns. Para a referência completa de flags, veja o guia de pre-commit da CLI em cli.archgate.dev.

archgate check --staged restringe a avaliação aos arquivos em staging no git:

  • Um projeto com centenas de arquivos-fonte, mas três arquivos em staging, verifica apenas esses três.
  • Regras cujos globs files não casam com nada na área de staging são totalmente ignoradas.
  • Verificações típicas de pre-commit terminam em menos de um segundo.

Quando uma regra falha, o comando sai com código 1 e o commit é bloqueado. As violações são impressas no stderr com o ID do ADR, o nome da regra, o caminho do arquivo e o número da linha, para que você possa localizá-las e corrigi-las imediatamente. Refaça o stage com git add e commite novamente.

Nenhuma ferramenta extra é necessária — o git procura por um executável em .git/hooks/pre-commit:

Crie o hook e torne-o executável:

cat > .git/hooks/pre-commit <<'EOF'
#!/bin/sh
archgate check --staged
EOF
chmod +x .git/hooks/pre-commit

Gerenciadores de hooks armazenam a configuração do hook em um arquivo versionado, de modo que cada clone do repositório recebe os mesmos hooks. Ambos os gerenciadores abaixo executam archgate check --staged exatamente como o hook nativo faz.

O Lefthook é um gerenciador de git hooks rápido e multiplataforma. Adicione a verificação ao lefthook.yml:

lefthook.yml
pre-commit:
commands:
adr-check:
run: archgate check --staged

Então instale os hooks:

Terminal window
lefthook install

Pre-commit hooks normalmente executam várias verificações. Cada comando roda de forma independente, e o commit é bloqueado se qualquer um sair com código diferente de zero. Com o Lefthook:

lefthook.yml
pre-commit:
commands:
lint:
run: npm run lint
typecheck:
run: npm run typecheck
adr-check:
run: archgate check --staged

O comando check aceita as mesmas flags aqui que em qualquer outro lugar; estas são as relevantes para hooks. A lista completa está na referência da CLI.

FlagPropósito
--stagedVerifica apenas arquivos em staging no git — obrigatória para pre-commit
--verboseMostra regras que passaram e timing — útil ao depurar por que um hook está lento
--adr <id>Verifica regras de um único ADR — útil para isolar uma regra durante a depuração
--jsonEmite JSON — para encaminhar a scripts de relatório personalizados