cc-hook 0.1.1

A cross-platform CLI that installs a git commit-msg hook to enforce Conventional Commits
cc-hook-0.1.1 is not a library.

CC Hook - Conventional Commits Hook

Uma CLI cross-platform em Rust para configurar automaticamente um git hook que valida mensagens de commit seguindo o padrão Conventional Commits.

🔀 Fork do projeto Conventional-Commits-Hook por @murillous, reescrito em Rust para compatibilidade cross-platform e capacidade de extensão.

🎯 O que faz

Este programa instala um hook commit-msg no seu repositório Git que:

  • ✅ Valida automaticamente todas as mensagens de commit
  • 🚫 Bloqueia commits que não seguem o padrão Conventional Commits
  • 📝 Fornece feedback claro sobre erros e exemplos de uso correto
  • 🔒 Mantém backup de hooks existentes
  • 🎨 Interface colorida e amigável

📋 Pré-requisitos

  • Rust/Cargo instalado
  • Git instalado no sistema
  • Estar dentro de um repositório Git inicializado

🚀 Instalação

cargo install cc-hook

O Cargo se encarrega de compilar e colocar o binário no PATH automaticamente (~/.cargo/bin).

💡 Dica: Se ~/.cargo/bin não estiver no PATH, o próprio cargo install avisa e mostra como configurar.

Uso

Após a instalação, basta navegar até o repositório desejado e executar:

cd meu-projeto
cc-hook install

O hook será instalado em .git/hooks/commit-msg. A partir daí, todos os commits serão validados automaticamente. Se a mensagem não estiver no formato correto, o commit será rejeitado.

✅ Exemplos de commits válidos

git commit -m "feat: adicionar autenticação de usuário"
git commit -m "fix(api): corrigir bug de timeout"
git commit -m "docs: atualizar README"
git commit -m "feat!: remover suporte ao Node.js 14"
git commit -m "chore(deps): atualizar dependências"

❌ Exemplos de commits inválidos

git commit -m "adicionar nova feature"        # Sem tipo
git commit -m "fix bug"                       # Sem dois pontos
git commit -m "invalid: "                     # Tipo inválido
git commit -m "feat:"                         # Sem descrição

🏷️ Tipos de commit suportados

Tipo Descrição
feat Nova funcionalidade
fix Correção de bug
docs Alterações na documentação
style Formatação, espaços (sem mudança de código)
refactor Refatoração (sem nova funcionalidade ou correção)
test Adicionar ou modificar testes
chore Manutenção geral (dependências, ferramentas)
build Sistema de build ou dependências externas
ci Configuração de CI/CD
perf Melhoria de performance
revert Reverter commit anterior

🎯 Formato das mensagens

<tipo>(<escopo opcional>): <descrição>

Exemplos:
feat(auth): implementar login com JWT
fix: corrigir vazamento de memória
docs(api): adicionar documentação dos endpoints

Breaking Changes

Para indicar mudanças que quebram compatibilidade, use !:

feat!: remover API v1
fix(api)!: alterar formato de resposta

🛠️ Funcionalidades

✨ Recursos

  • Validação automática: Verifica se está em um repositório Git
  • Backup inteligente: Preserva hooks existentes com timestamp
  • Interface amigável: Mensagens coloridas e informativas
  • Flexível: Permite sobrescrever hooks existentes
  • Completo: Feedback detalhado sobre erros
  • Cross-platform: Funciona em qualquer terminal (PowerShell, CMD, Bash, Zsh, Fish)

🔧 Exceções automáticas

O hook ignora automaticamente:

  • Merge commits (Merge branch...)
  • Revert commits (Revert...)
  • Commits iniciais (Initial commit)
  • Commits vazios

🔧 Gerenciamento

Ver status do hook

ls -la .git/hooks/commit-msg

Remover o hook

rm .git/hooks/commit-msg

Restaurar backup

cp .git/hooks/commit-msg.backup.TIMESTAMP .git/hooks/commit-msg

🌍 Compatibilidade

  • ✅ Linux
  • ✅ macOS
  • ✅ Windows (PowerShell, CMD, Windows Terminal)
  • ✅ Todas as versões do Git

🤝 Contribuindo

Contribuições são bem-vindas! Para contribuir:

  1. Faça fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/nova-funcionalidade)
  3. Commit suas mudanças (git commit -m "feat: adicionar nova funcionalidade")
  4. Push para a branch (git push origin feature/nova-funcionalidade)
  5. Abra um Pull Request

📝 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

📚 Links úteis

❓ FAQ

P: O hook funciona em repositórios já existentes?

R: Sim, funciona em qualquer repositório Git, novo ou existente.

P: Posso personalizar os tipos de commit?

R: Sim, você pode editar o arquivo .git/hooks/commit-msg para adicionar tipos customizados.

P: O que acontece se eu clonar o repositório?

R: Hooks não são versionados pelo Git, então cada colaborador precisa executar cc-hook install.

P: Posso usar em repositórios corporativos?

R: Sim, o programa é totalmente local e não envia dados para nenhum servidor.

P: Como verifico se o comando está disponível globalmente?

R: Execute cc-hook sem argumentos para verificar se está no PATH.

P: O que fazer se o comando não for encontrado?

R: Verifique se ~/.cargo/bin está no PATH. O cargo install geralmente configura isso automaticamente.


Talvez você queira dar uma olhada no repositório original deste projeto, com uma versão completa em Schell Script :)

https://github.com/thera-org/Conventional-Commits-Hook