[
  {
    "path": "CONTRIBUTING.md",
    "content": "# Como contribuir?\n\nEste é um projeto totalmente livre que aceita contribuições via pull requests no GitHub. Este documento tem a responsabilidade de alinhar as contribuições de acordo com os padrões estabelecidos no mesmo. Em caso de dúvidas, [abra uma issue](https://github.com/iuricode/padroes-de-commits/issues/new).\n\n## Passos\n\n1. Crie um fork deste repositório.\n2. Envie seus commits em português.\n3. Insira um pequeno resumo sobre o que foi adicionado.\n4. Solicite um pull request.\n\n## Recomendação (opcional)\n\nPara uma melhor semântica nos commits, recomendamos utilizar os commits mencionados neste projeto open source. Assim ficará mais fácil para avaliar seu pull request.\n"
  },
  {
    "path": "LICENSE.md",
    "content": "#### Copyright © 2021 / [Iuri Silva](https://github.com/iuricode)\n\nA permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste arquivo, sem restrição nos direitos de usar, copiar, modificar e mesclar.\n"
  },
  {
    "path": "README.md",
    "content": "# Padrões de commits 📜\r\n\r\nDe acordo com a documentação do **[Conventional Commits](https://www.conventionalcommits.org/pt-br)**, commits semânticos são uma convenção simples para ser utilizada nas mensagens de commit. Essa convenção define um conjunto de regras para criar um histórico de commit explícito, o que facilita a criação de ferramentas automatizadas.\r\n\r\nEsses commits auxiliarão você e sua equipe a entenderem de forma facilitada quais alterações foram realizadas no trecho de código que foi commitado.\r\n\r\nEssa identificação ocorre por meio de uma palavra e emoji que identifica se aquele commit realizado se trata de uma alteração de código, atualização de pacotes, documentação, alteração de visual, teste...\r\n\r\n## Tipo e descrição 🦄\r\n\r\nO commit semântico possui os elementos estruturais abaixo (tipos), que informam a intenção do seu commit ao utilizador(a) de seu código.\r\n\r\n- `feat`- Commits do tipo feat indicam que seu trecho de código está incluindo um **novo recurso** (se relaciona com o MINOR do versionamento semântico).\r\n\r\n- `fix` - Commits do tipo fix indicam que seu trecho de código commitado está **solucionando um problema** (bug fix), (se relaciona com o PATCH do versionamento semântico).\r\n\r\n- `docs` - Commits do tipo docs indicam que houveram **mudanças na documentação**, como por exemplo no Readme do seu repositório. (Não inclui alterações em código).\r\n\r\n- `test` - Commits do tipo test são utilizados quando são realizadas **alterações em testes**, seja criando, alterando ou excluindo testes unitários. (Não inclui alterações em código)\r\n\r\n- `build` - Commits do tipo build são utilizados quando são realizadas modificações em **arquivos de build e dependências**.\r\n\r\n- `perf` - Commits do tipo perf servem para identificar quaisquer alterações de código que estejam relacionadas a **performance**.\r\n\r\n- `style` - Commits do tipo style indicam que houveram alterações referentes a **formatações de código**, semicolons, trailing spaces, lint... (Não inclui alterações em código).\r\n\r\n- `refactor` - Commits do tipo refactor referem-se a mudanças devido a **refatorações que não alterem sua funcionalidade**, como por exemplo, uma alteração no formato como é processada determinada parte da tela, mas que manteve a mesma funcionalidade, ou melhorias de performance devido a um code review.\r\n\r\n- `chore` - Commits do tipo chore indicam **atualizações de tarefas** de build, configurações de administrador, pacotes... como por exemplo adicionar um pacote no gitignore. (Não inclui alterações em código)\r\n\r\n- `ci` - Commits do tipo ci indicam mudanças relacionadas a **integração contínua** (_continuous integration_).\r\n\r\n- `raw` - Commits do tipo raw indicam mudanças relacionadas a arquivos de configurações, dados, features, parâmetros.\r\n\r\n- `cleanup` - Commits do tipo cleanup são utilizados para remover código comentado, trechos desnecessários ou qualquer outra forma de limpeza do código-fonte, visando aprimorar sua legibilidade e manutenibilidade.\r\n\r\n- `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.\r\n\r\n## 🛠️ Como instalar o arquivo `commit-msg.sh` para validar mensagens de commits com conventional commits\r\n\r\n### Passo 1: Certifique-se de que o Git está instalado 🌟\r\n\r\nAntes de tudo, verifique se o Git está instalado na sua máquina. Abra o terminal e execute:\r\n\r\n```bash\r\ngit --version\r\n```\r\n\r\nSe 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).\r\n\r\n### Passo 2: Localize o arquivo `commit-msg.sh` 📂\r\n\r\nO 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.\r\n\r\nPor exemplo:\r\n\r\n```bash\r\ngit clone https://github.com/seu-repositorio/projeto.git\r\ncd projeto\r\n```\r\n\r\n### Passo 3: Crie o diretório `.git/hooks` (se ainda não existir) 📁\r\n\r\nOs hooks do Git ficam no diretório `.git/hooks`. Verifique se ele existe no seu projeto:\r\n\r\n```bash\r\nls -la .git/hooks\r\n```\r\n\r\nSe o diretório não existir, crie-o:\r\n\r\n```bash\r\nmkdir -p .git/hooks\r\n```\r\n\r\n### Passo 4: Copie o arquivo `commit-msg.sh` para o diretório `.git/hooks` 📋\r\n\r\nCopie o arquivo `commit-msg.sh` para o diretório `.git/hooks` e renomeie-o para `commit-msg` (sem extensão):\r\n\r\n```bash\r\ncp caminho/para/commit-msg.sh .git/hooks/commit-msg\r\n```\r\n\r\n> **Nota:** Substitua `caminho/para/commit-msg.sh` pelo caminho real do arquivo.\r\n\r\n### Passo 5: Dê permissão de execução ao script ✅\r\n\r\nPara que o Git possa executar o script, você precisa dar permissão de execução:\r\n\r\n```bash\r\nchmod +x .git/hooks/commit-msg\r\n```\r\n\r\n### Passo 6: Teste o hook de commit 💻\r\n\r\nAgora, tente fazer um commit no seu projeto. Por exemplo:\r\n\r\n```bash\r\ngit add .\r\ngit commit -m \"feat: adicionar funcionalidade xyz\"\r\n```\r\n\r\nSe 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.\r\n\r\n### Passo 7: Personalize o script (opcional) 🎨\r\n\r\nSe 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.\r\n\r\n## Recomendações 🎉\r\n\r\n- Adicione um tipo consistente com o título do conteúdo.\r\n- Recomendamos que na primeira linha deve ter no máximo 4 palavras.\r\n- Para descrever com detalhes, usar a descrição do commit.\r\n- Usar um emoji no início da mensagem de commit representando sobre o commit.\r\n- Os links precisam ser adicionados em sua forma mais autêntica, ou seja: sem encurtadores de link e links afiliados.\r\n\r\n## Complementos de commits 💻\r\n\r\n- **Rodapé:** informação sobre o revisor e número do card no Trello ou Jira. Exemplo: Reviewed-by: Elisandro Mello Refs #133\r\n- **Corpo:** descrições mais precisas do que está contido no commit, apresentando impactos e os motivos pelos quais foram empregadas as alterações no código, como também instruções essenciais para intervenções futuras. Exemplo: see the issue for details on typos fixed.\r\n- **Descrições:** uma descrição sucinta da mudança. Exemplo: correct minor typos in code\r\n\r\n## Padrões de emojis 💈\r\n\r\n<table>\r\n  <thead>\r\n    <tr>\r\n      <th>Tipo do commit</th>\r\n      <th>Emoji</th>\r\n      <th>Palavra-chave</th>\r\n    </tr>\r\n  </thead>\r\n <tbody>\r\n    <tr>\r\n      <td>Acessibilidade</td>\r\n      <td>♿ <code>:wheelchair:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Adicionando um teste</td>\r\n      <td>✅ <code>:white_check_mark:</code></td>\r\n      <td><code>test</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Atualizando a versão de um submódulo</td>\r\n      <td>⬆️ <code>:arrow_up:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Retrocedendo a versão de um submódulo</td>\r\n      <td>⬇️ <code>:arrow_down:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Adicionando uma dependência</td>\r\n      <td>➕ <code>:heavy_plus_sign:</code></td>\r\n      <td><code>build</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Alterações de revisão de código</td>\r\n      <td>👌 <code>:ok_hand:</code></td>\r\n      <td><code>style</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Animações e transições</td>\r\n      <td>💫 <code>:dizzy:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Bugfix</td>\r\n      <td>🐛 <code>:bug:</code></td>\r\n      <td><code>fix</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Comentários</td>\r\n      <td>💡 <code>:bulb:</code></td>\r\n      <td><code>docs</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Commit inicial</td>\r\n      <td>🎉 <code>:tada:</code></td>\r\n      <td><code>init</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Configuração</td>\r\n      <td>🔧 <code>:wrench:</code></td>\r\n      <td><code>chore</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Deploy</td>\r\n      <td>🚀 <code>:rocket:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Documentação</td>\r\n      <td>📚 <code>:books:</code></td>\r\n      <td><code>docs</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Em progresso</td>\r\n      <td>🚧 <code>:construction:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Estilização de interface</td>\r\n      <td>💄 <code>:lipstick:</code></td>\r\n      <td><code>feat</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Infraestrutura</td>\r\n      <td>🧱 <code>:bricks:</code></td>\r\n      <td><code>ci</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Lista de ideias (tasks)</td>\r\n      <td>🔜 <code> :soon: </code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Mover/Renomear</td>\r\n      <td>🚚 <code>:truck:</code></td>\r\n      <td><code>chore</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Novo recurso</td>\r\n      <td>✨ <code>:sparkles:</code></td>\r\n      <td><code>feat</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Package.json em JS</td>\r\n      <td>📦 <code>:package:</code></td>\r\n      <td><code>build</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Performance</td>\r\n      <td>⚡ <code>:zap:</code></td>\r\n      <td><code>perf</code></td>\r\n    </tr>\r\n    <tr>\r\n        <td>Refatoração</td>\r\n        <td>♻️ <code>:recycle:</code></td>\r\n        <td><code>refactor</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Limpeza de Código</td>\r\n      <td>🧹 <code>:broom:</code></td>\r\n      <td><code>cleanup</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Removendo um arquivo</td>\r\n      <td>🗑️ <code>:wastebasket:</code></td>\r\n      <td><code>remove</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Removendo uma dependência</td>\r\n      <td>➖ <code>:heavy_minus_sign:</code></td>\r\n      <td><code>build</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Responsividade</td>\r\n      <td>📱 <code>:iphone:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Revertendo mudanças</td>\r\n      <td>💥 <code>:boom:</code></td>\r\n      <td><code>fix</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Segurança</td>\r\n      <td>🔒️ <code>:lock:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>SEO</td>\r\n      <td>🔍️ <code>:mag:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Tag de versão</td>\r\n      <td>🔖 <code>:bookmark:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Teste de aprovação</td>\r\n      <td>✔️ <code>:heavy_check_mark:</code></td>\r\n      <td><code>test</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Testes</td>\r\n      <td>🧪 <code>:test_tube:</code></td>\r\n      <td><code>test</code></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Texto</td>\r\n      <td>📝 <code>:pencil:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Tipagem</td>\r\n      <td>🏷️ <code>:label:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Tratamento de erros</td>\r\n      <td>🥅 <code>:goal_net:</code></td>\r\n      <td></td>\r\n    </tr>\r\n    <tr>\r\n      <td>Dados</td>\r\n      <td>🗃️ <code>:card_file_box:</code></td>\r\n      <td><code>raw</code></td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n## 💻 Exemplos\r\n\r\n<table>\r\n  <thead>\r\n    <tr>\r\n      <th>Comando Git</th>\r\n      <th>Resultado no GitHub</th>\r\n    </tr>\r\n  </thead>\r\n <tbody>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":tada: Commit inicial\"</code>\r\n      </td>\r\n      <td>🎉 Commit inicial</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":books: docs: Atualização do README\"</code>\r\n      </td>\r\n      <td>📚 docs: Atualização do README</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":bug: fix: Loop infinito na linha 50\"</code>\r\n      </td>\r\n      <td>🐛 fix: Loop infinito na linha 50</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":sparkles: feat: Página de login\"</code>\r\n      </td>\r\n      <td>✨ feat: Página de login</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":bricks: ci: Modificação no Dockerfile\"</code>\r\n      </td>\r\n      <td>🧱 ci: Modificação no Dockerfile</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":recycle: refactor: Passando para arrow functions\"</code>\r\n      </td>\r\n      <td>♻️ refactor: Passando para arrow functions</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":zap: perf: Melhoria no tempo de resposta\"</code>\r\n      </td>\r\n      <td>⚡ perf: Melhoria no tempo de resposta</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":boom: fix: Revertendo mudanças ineficientes\"</code>\r\n      </td>\r\n      <td>💥 fix: Revertendo mudanças ineficientes</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":lipstick: feat: Estilização CSS do formulário\"</code>\r\n      </td>\r\n      <td>💄 feat: Estilização CSS do formulário</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":test_tube: test: Criando novo teste\"</code>\r\n      </td>\r\n      <td>🧪 test: Criando novo teste</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":bulb: docs: Comentários sobre a função LoremIpsum( )\"</code>\r\n      </td>\r\n      <td>💡 docs: Comentários sobre a função LoremIpsum( )</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":card_file_box: raw: RAW Data do ano aaaa\"</code>\r\n      </td>\r\n      <td>🗃️ raw: RAW Data do ano aaaa</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":broom: cleanup: Eliminando blocos de código comentados e variáveis não utilizadas na função de validação de formulário\"</code>\r\n      </td>\r\n      <td>🧹 cleanup: Eliminando blocos de código comentados e variáveis não utilizadas na função de validação de formulário</td>\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <code>git commit -m \":wastebasket: remove: Removendo arquivos não utilizados do projeto para manter a organização e atualização contínua\"</code>\r\n      </td>\r\n      <td>🗑️ remove: Removendo arquivos não utilizados do projeto para manter a organização e atualização contínua</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n# Principais comandos do Git 📜\r\n\r\n- `git clone url-do-repositorio-no-github` - Clona um repositório remoto existente no GitHub para o seu ambiente local.\r\n\r\n- `git init` - Inicializa um novo repositório Git no diretório atual.\r\n\r\n- `git add .` - Adiciona todos os arquivos e alterações no diretório atual para a área de stage (preparando-os para o commit).\r\n\r\n- `git commit -m \"mensagem do commit\"` - Registra as alterações adicionadas na área de stage com uma mensagem descritiva sobre o que foi modificado.\r\n\r\n- `git branch -M main` - Renomeia a branch atual (master) para main. O -M é usado para forçar a renomeação, movendo a branch se necessário.\r\n\r\n- `git remote add origin https://github.com/usuario/nome-do-repositorio.git` - Adiciona um repositório remoto chamado origin ao repositório local. Use `https://github.com/usuario` para configurar o repositório remoto com HTTPS ou `git@github.com:usuario` para configurar com SSH.\r\n\r\n- `git push -u origin main` - Envia os commits da branch main do repositório local para o repositório remoto origin e define main como a branch padrão para futuros push e pull. O -u (ou --set-upstream) configura a branch upstream para facilitar os próximos comandos git push e git pull e eliminar a necessidade de especificar a branch.\r\n\r\n- `git remote add origin git@github.com:usuario/projeto.git` `git branch -M main` `git push -u origin main` - Quando você já tem um repositório local e quer conectá-lo a um repositório remoto no GitHub, adiciona o repositório remoto, renomeia a branch principal para main e envia os commits iniciais.\r\n\r\n- `git fetch` - Busca todas as atualizações do repositório remoto sem integrá-las à branch atual. Isso atualiza as referências remotas.\r\n\r\n- `git pull origin main` - Atualiza a branch local main com as mudanças do repositório remoto origin. Combina git fetch e git merge.\r\n\r\n- `git push --force-with-lease` - Forma mais segura de forçar o envio de alterações locais para o repositório remoto. Verifica se não houve alterações feitas por outros colaboradores desde sua última atualização local, evitando sobrescrever acidentalmente o trabalho de outros.\r\n\r\n- `git revert id_do_commit_que_vai_ser_revertido` - Cria um novo commit que desfaz as alterações feitas pelo commit especificado, preservando o histórico. Útil para desfazer mudanças de forma segura sem reescrever o histórico.\r\n\r\n- `git reset --hard id_do_commit_anterior_ao_que_vai_ser_apagado` - Redefine o repositório para o estado do commit especificado, apagando todas as mudanças feitas após esse commit. Ideal para uso local. Para sincronizar remotamente, use `git push --force-with-lease` posteriormente.\r\n\r\n- `git commit --amend -m \"mensagem_reescrita\"` - Altera a mensagem do último commit. Após usar este comando, sincronize remotamente com `git push --force-with-lease`.\r\n\r\n- `git cherry-pick HASH_DO_COMMIT` - Utilizado para obter um commit específico. Exemplo de uso: Imagine que você tenha duas branchs (main) e (develop) e na segunda você tem 3 commits mas deseja apenas pegar o primeiro commit dela, com o uso de cherry-pick você pode.\r\n\r\n- `git switch <branch>` - Alterna para uma branch diferente no repositório local. Use `git switch -c <branch>` para criar e alternar para uma nova branch.\r\n\r\n# Glossário 📖\r\n\r\n- `fork` - Cópia de um repositório para a sua própria conta no GitHub. Isso cria um novo repositório em sua conta que é independente do original, permitindo que você faça alterações sem afetar o repositório original.\r\n\r\n- `issues` - Ferramenta usada para gerenciar tarefas, pedidos de novos recursos e correções de bugs em projetos de código aberto. As issues devem ser descritas e listadas, permitindo aos colaboradores discutirem e rastrearem o progresso das mesmas.\r\n\r\n- `pull request` - Mecanismo usado para submeter alterações propostas ao repositório original. Um pull request é uma solicitação para que os mantenedores do projeto revisem e potencialmente incorporem as alterações. O pull request passará por um processo de avaliação e pode ser aceito ou rejeitado.\r\n\r\n- `gist` - Ferramenta que permite o compartilhamento de trechos de código sem a necessidade de criar um repositório completo. Gists podem ser compartilhados publicamente ou de forma privada.\r\n\r\n# Contribuição ✨\r\n\r\nAjude a comunidade tornando este projeto ainda mais incrível. Leia como contribuir clicando **[aqui](https://github.com/iuricode/padroes-de-commits/blob/main/CONTRIBUTING.md)** e a **[licença](https://github.com/iuricode/padroes-de-commits/blob/main/LICENSE.md)**. Estou convencido de que juntos alcançaremos coisas incríveis!\r\n\r\n## Disponível para freelas - #OpenToWork 🚀\r\n\r\nAtualmente estou aberto para oportunidades como Desenvolvedor Frontend e UI/UX Designer. Se você precisa de alguém para transformar ideias em interfaces bonitas, responsivas e funcionais, podemos trabalhar juntos!\r\n\r\n📬 Entre em contato:\r\n📧 iuricold99@gmail.com\r\n💼 [Linkedin](https://www.linkedin.com/in/iuricode/)\r\n"
  },
  {
    "path": "commit-msg.sh",
    "content": "#!/usr/bin/env bash\n\n# Path to the commit message file (provided by Git).\nCOMMIT_MSG_FILE=$1\n\n# Read the commit message from the file.\nCOMMIT_MSG=$(cat \"$COMMIT_MSG_FILE\")\n\nCONVENTIONAL_COMMIT_REGEX='^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\\([a-zA-Z0-9_.-]+\\))?(!)?:\\s.*$'\n\n# Check if the commit message matches the regex\nif ! [[ $COMMIT_MSG =~ $CONVENTIONAL_COMMIT_REGEX ]]; then\n    echo \"ERRO: A mensagem de commit não segue o formato do Conventional Commits.\"\n    echo\n    echo \"O formato correto da mensagem de commit é obrigatório:\"\n    echo \"  <tipo>(<escopo opcional>): <descrição>\"\n    echo\n    echo \"Os tipos válidos são:\"\n    echo \"  feat:     Uma nova funcionalidade.\"\n    echo \"  fix:      Correção de um bug.\"\n    echo \"  docs:     Alterações na documentação.\"\n    echo \"  style:    Alterações de estilo de código (formatação, ponto-e-vírgula ausente, etc.).\"\n    echo \"  refactor: Refatoração de código (nem corrige bug nem adiciona funcionalidade).\"\n    echo \"  test:     Adicionar ou atualizar testes.\"\n    echo \"  chore:    Tarefas rotineiras como atualização de dependências ou ferramentas de build.\"\n    echo \"  build:    Alterações que afetam o sistema de build ou dependências externas.\"\n    echo \"  ci:       Alterações nos arquivos de configuração de CI ou scripts.\"\n    echo \"  perf:     Melhorias de desempenho.\"\n    echo \"  revert:   Reverter um commit anterior.\"\n    echo\n    echo \"Exemplos:\"\n    echo \"  feat(auth): adicionar funcionalidade de login\"\n    echo \"  fix(api)!: resolver problema de timeout\"\n    echo \"  docs(readme): atualizar instruções de instalação\"\n    echo\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "prepare-commit-msg.sh",
    "content": "#!/bin/sh\n\n# Implemente o serviço em https://github.com/tiagolofi/ai-commit-hooks-api\n# Mais detalhes em: https://github.com/tiagolofi/ai-commit-hooks\n\nCOMMIT_MSG_FILE=$1\n\nGIT_DIFF=$(git diff --staged)\n\nAPI_RESPONSE=$(\n    curl -X 'POST' \\\n    'http://localhost:8080/commit/gpt-4o-mini' \\\n    -H 'Token-Consumo: SEU_TOKEN_GERADO_NA_APLICACAO' \\\n    -H 'Content-Type: text/plain' \\\n    -d \"$GIT_DIFF\"\n)\n\nCOMMIT=$(echo $API_RESPONSE | grep -oP '(?<=\"respostaGPT4oMini\":\")[^\"]*')\n\necho \"$COMMIT\" > temp_msg\ncat \"$COMMIT_MSG_FILE\" >> temp_msg # dê um \" \" na mensagem de commit\nmv temp_msg \"$COMMIT_MSG_FILE\"\nCOMMIT_MSG=$(cat \"$COMMIT_MSG_FILE\")\nif [[ -z \"$COMMIT_MSG\" || \"$COMMIT_MSG\" =~ ^[[:space:]]*$ ]]; then\n    exit 1 # erro: mensagem vazia\nfi\n"
  },
  {
    "path": "push.sh",
    "content": "#!/bin/bash\n\n# Script shell para facilitar a criacao de commits semanticos\n\necho \"Selecione o tipo de commit:\"\necho \"1. feat: Novo recurso ✨\"\necho \"2. fix: Correção de bug 🐛\"\necho \"3. docs: Documentação 📚\"\necho \"4. test: Testes 🧪\"\necho \"5. build: Build ➕\"\necho \"6. perf: Performance ⚡\"\necho \"7. style: Estilo de código 🎨\"\necho \"8. refactor: Refatoração ♻️\"\necho \"9. chore: Tarefas 🔧\"\necho \"10. ci: Integração contínua 🧱\"\necho \"11. raw: Dados RAW 🗃️\"\necho \"12. cleanup: Limpeza de código 🧹\"\necho \"13. remove: Remoção de arquivos 🗑️\"\necho \"\"\n\n\nread -p \"Digite o número correspondente ao tipo de commit: \" commit_type\n\n\ncase $commit_type in\n  1) type=\"feat\"; emoji=\"✨\";;\n  2) type=\"fix\"; emoji=\"🐛\";;\n  3) type=\"docs\"; emoji=\"📚\";;\n  4) type=\"test\"; emoji=\"🧪\";;\n  5) type=\"build\"; emoji=\"➕\";;\n  6) type=\"perf\"; emoji=\"⚡\";;\n  7) type=\"style\"; emoji=\"🎨\";;\n  8) type=\"refactor\"; emoji=\"♻️\";;\n  9) type=\"chore\"; emoji=\"🔧\";;\n  10) type=\"ci\"; emoji=\"🧱\";;\n  11) type=\"raw\"; emoji=\"🗃️\";;\n  12) type=\"cleanup\"; emoji=\"🧹\";;\n  13) type=\"remove\"; emoji=\"🗑️\";;\n  *) echo \"Tipo de commit inválido\"; exit 1;;\nesac\n\n\nread -p \"Digite a mensagem do commit: \" message\n\n\ncommit_message=\"[$type] $emoji: $message\"\ngit commit -a -m \"$commit_message\"\n\necho \"Commit criado com sucesso: $commit_message\"\n"
  }
]