Skip to content

Commit

Permalink
feat: adicionando script 'commit-msg.sh' e uma documentação de como i…
Browse files Browse the repository at this point in the history
…nstalar
  • Loading branch information
cfgnunes committed Feb 11, 2025
1 parent c3db2aa commit 40c6a7d
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 0 deletions.
70 changes: 70 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,76 @@ O commit semântico possui os elementos estruturais abaixo (tipos), que informam

- `remove` - Commits do tipo remove indicam a exclusão de arquivos, diretórios ou funcionalidades obsoletas ou não utilizadas, reduzindo o tamanho e a complexidade do projeto e mantendo-o mais organizado.

## 🛠️ Como instalar o arquivo `commit-msg.sh` para validar mensagens de commits com conventional commits

### Passo 1: Certifique-se de que o Git está instalado 🌟

Antes de tudo, verifique se o Git está instalado na sua máquina. Abra o terminal e execute:

```bash
git --version
```

Se você receber uma versão do Git como resposta, está tudo certo! Caso contrário, baixe e instale o Git aqui: [Git Downloads](https://git-scm.com/downloads).

### Passo 2: Localize o arquivo `commit-msg.sh` 📂

O arquivo `commit-msg.sh` deve estar disponível no repositório do seu projeto ou em um diretório específico. Certifique-se de que ele está acessível. Se não estiver, faça o download ou clone o repositório onde ele está localizado.

Por exemplo:

```bash
git clone https://github.com/seu-repositorio/projeto.git
cd projeto
```

### Passo 3: Crie o diretório `.git/hooks` (se ainda não existir) 📁

Os hooks do Git ficam no diretório `.git/hooks`. Verifique se ele existe no seu projeto:

```bash
ls -la .git/hooks
```

Se o diretório não existir, crie-o:

```bash
mkdir -p .git/hooks
```

### Passo 4: Copie o arquivo `commit-msg.sh` para o diretório `.git/hooks` 📋

Copie o arquivo `commit-msg.sh` para o diretório `.git/hooks` e renomeie-o para `commit-msg` (sem extensão):

```bash
cp caminho/para/commit-msg.sh .git/hooks/commit-msg
```

> **Nota:** Substitua `caminho/para/commit-msg.sh` pelo caminho real do arquivo.
### Passo 5: Dê permissão de execução ao script ✅

Para que o Git possa executar o script, você precisa dar permissão de execução:

```bash
chmod +x .git/hooks/commit-msg
```

### Passo 6: Teste o hook de commit 💻

Agora, tente fazer um commit no seu projeto. Por exemplo:

```bash
git add .
git commit -m "feat: adicionar funcionalidade xyz"
```

Se a mensagem de commit seguir o padrão **Conventional Commits**, o commit será aceito. Caso contrário, o hook irá bloquear o commit e exibir uma mensagem de erro.

### Passo 7: Personalize o script (opcional) 🎨

Se necessário, abra o arquivo `.git/hooks/commit-msg` em um editor de texto e personalize as regras de validação para atender às necessidades do seu projeto.

## Recomendações 🎉

- Adicione um tipo consistente com o título do conteúdo.
Expand Down
41 changes: 41 additions & 0 deletions commit-msg.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash

# Path to the commit message file (provided by Git).
COMMIT_MSG_FILE=$1

# Read the commit message from the file.
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")

# Regular expression for validating Conventional Commits.
# Format: <type>(<scope>): <subject>
# Example: feat(auth): add login functionality
CONVENTIONAL_COMMIT_REGEX='^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\([a-zA-Z0-9_-]+\))?:\s.*$'

# Check if the commit message matches the regex
if ! [[ $COMMIT_MSG =~ $CONVENTIONAL_COMMIT_REGEX ]]; then
echo "ERRO: A mensagem de commit não segue o formato do Conventional Commits."
echo ""
echo "O formato correto da mensagem de commit é obrigatório:"
echo " <tipo>(<escopo>): <assunto>"
echo ""
echo "Exemplos:"
echo " feat(auth): adicionar funcionalidade de login"
echo " fix(api): resolver problema de timeout"
echo " docs(readme): atualizar instruções de instalação"
echo ""
echo "Tipos válidos são:"
echo " feat: Uma nova funcionalidade."
echo " fix: Correção de um bug."
echo " docs: Alterações na documentação."
echo " style: Alterações de estilo de código (formatação, ponto-e-vírgula ausente, etc.)."
echo " refactor: Refatoração de código (nem corrige bug nem adiciona funcionalidade)."
echo " test: Adicionar ou atualizar testes."
echo " chore: Tarefas rotineiras como atualização de dependências ou ferramentas de build."
echo " build: Alterações que afetam o sistema de build ou dependências externas."
echo " ci: Alterações nos arquivos de configuração de CI ou scripts."
echo " perf: Melhorias de desempenho."
echo " revert: Reverter um commit anterior."
exit 1
fi

exit 0

0 comments on commit 40c6a7d

Please sign in to comment.