GitPR CLI é uma ferramenta de automação de linha de comando que utiliza a inteligência artificial do Google Gemini e do DeepSeek para analisar as suas alterações de código (git diff) ou ficheiros completos. A ferramenta gera automaticamente mensagens de commit no padrão Conventional Commits, descrições detalhadas para Pull Requests e Code Reviews profundos visando a redução de dívida técnica.
Este projeto foi desenvolvido em Python e utiliza as seguintes bibliotecas principais:
- Click: Para criar uma interface de linha de comando (CLI) robusta e amigável.
- Google GenAI: SDK oficial para integração direta com a API do Gemini.
- OpenAI: Biblioteca utilizada devido à sua total compatibilidade com a poderosa API do DeepSeek.
- Python-dotenv: Para a gestão segura de variáveis de ambiente.
- Pytest: Para execução de testes unitários de forma simples, colorida e legível no console.
- Cryptography: Para garantir que sua
GEMINI_API_KEYseja armazenada de forma encriptada e segura no disco. - PyYAML: Utilizado para ler e processar as regras customizadas de análise estática do arquivo
.gitpr.linter.yml.
Se você deseja gerar o seu próprio binário a partir do código-fonte, utilizamos o PyInstaller. Certifique-se de estar no diretório raiz do projeto e com o ambiente virtual configurado.
-
Instale as dependências de desenvolvimento (caso ainda não tenha feito):
pipenv install --dev
-
Execute o comando de build apontando para o nosso ponto de entrada (
run.py):pipenv run pyinstaller --noconfirm --onefile --icon=icon.ico --name gitpr run.py
Nota técnica: A flag
--onefilegarante que todo o Python, bibliotecas e dependências ficam comprimidos num único binário, enquanto--paths srcajuda o compilador a encontrar os nossos arquivoscore.pyeconfig.py. 🛠️
Após a execução deste comando, o PyInstaller vai criar algumas pastas (build e dist).
O seu arquivo final e pronto a usar estará dentro da pasta dist/ com o nome gitpr (ou gitpr.exe no Windows).
Para garantir que a lógica de captura do Git e a integração com a IA estejam funcionando corretamente, utilizamos testes unitários.
-
Instale as dependências de teste (caso ainda não tenha feito):
pipenv install --dev pytest
-
Execute os testes com o comando:
pipenv run pytest -v
O Pytest irá detectar automaticamente os arquivos dentro da pasta tests/ e apresentará um relatório detalhado da execução.
- Faça o download do arquivo executável gitpr na aba "Releases" do GitHub.
- Mova o executável para uma pasta que esteja no seu PATH (ex: /usr/local/bin no Linux/Mac ou na pasta do seu utilizador no Windows).
- Na primeira execução, o assistente irá guiá-lo:
$ gitpr
🚀 Automação Inteligente de PRs com IA
🔧 Primeira execução detetada! Vamos configurar o GitPR CLI.
🔑 Insira sua GEMINI_API_KEY:
📄 Padrão do nome do arquivo de saída [{branch}_{datetime}_PR_DESC.md]:Nota: A sua configuração será guardada em segurança no arquivo ~/.gitpr/.env.
🔒 Nota sobre Segurança: O GitPR CLI utiliza criptografia simétrica (Fernet). Sua chave de API é armazenada como um hash no arquivo
.env, e a chave mestra para desencriptação é gerada automaticamente em~/.gitpr/secret.key. Nunca compartilhe seu arquivo secret.key.
-
Clone o repositório:
git clone https://github.com/natanfiuza/gitpr.git -
Entre na pasta:
cd gitpr -
Atualize o ambiente:
pipenv install google-genai openai python-dotenv click cryptography- Execute: pipenv run python src/main.py
O GitPR possui um comportamento padrão poderoso e diversas opções avançadas para auxiliar no seu dia a dia como desenvolvedor.
Basta executar o comando puro no seu terminal:
gitprA ferramenta irá sincronizar com o remoto (git fetch), comparar as suas alterações com a branch principal remota (ex: origin/main), e gerar um arquivo Markdown (ex: feature-login_20260421110134_PR_DESC.md) na raiz do seu projeto com a sugestão completa para o seu Pull Request.
Você pode passar as seguintes flags para ações específicas:
-cou--commit: Executa umgit difflocal e exibe apenas a mensagem de commit sugerida.-rou--review: Realiza um Code Review detalhado das alterações locais.-fou--fullreview: Realiza um Code Review completo analisando todas as alterações desde a branch remota.-i <arquivo>ou--input <arquivo>: Auditoria de Ficheiro Completo. Usado obrigatoriamente em conjunto com-rou-f, ele ignora o histórico do git e faz um Code Review do ficheiro inteiro. Excelente para atuar como consultor em refatoração de código legado.--provider <gemini|deepseek>: Força a utilização de uma IA específica apenas para esta execução, ignorando o seu padrão guardado no.env.-lou--linter: Roda apenas o linter estático local (sem chamadas de IA). Ideal para usar em pipelines de CI/CD para bloquear código fora do padrão.-ihou--installhooks: Instala automaticamente os Git Hooks locais (pre-commiteprepare-commit-msg) no seu repositório.-sou--skill: Cria os arquivos de template de contexto da IA (.gitpr.commit.md,.gitpr.pr.md,.gitpr.review.md,.gitpr.filereview.md) e do Linter (.gitpr.linter.yml) na raiz do projeto.-uou--update: Verifica e instala a versão mais recente do GitPR (Auto-Updater).-hou--help: Exibe o menu de ajuda.
⚙️ Nota Técnica (--hook): O GitPR possui uma flag oculta
--hook <arquivo>que é acionada exclusivamente pelo sistema de Git Hooks em background. Ela permite que a IA injete a mensagem sugerida diretamente no arquivo temporário do Git, sem poluir o seu terminal.
O GitPR CLI permite que você defina regras rígidas que serão validadas instantaneamente durante o --review ou --fullreview, sem depender da IA. Isso é ideal para evitar que erros comuns (como console.log ou IPs de teste) cheguem ao repositório.
Ao rodar gitpr --skill, um modelo será gerado. Você pode configurar regras usando Expressões Regulares (Regex):
rules:
- name: "check-localhost"
extensions: ["js", "php"] # Extensões que serão validadas
regex: 'http(s)?://(localhost|127\.0\.0\.1)' # O que procurar
message: "🚨 Uso de localhost detectado no arquivo {file_name}"
ignore_comments: true # Ignora se a linha estiver comentada
ignore_paths: # Pastas ou arquivos ignorados (aceita *)
- "vendor/*"
- "node_modules/*"O Linter analisa apenas as linhas adicionadas no seu git diff, garantindo uma execução focada e extremamente rápida. Se houver violações, elas aparecerão com destaque no topo do seu arquivo de revisão.
O GitPR não está preso a uma única Inteligência Artificial. Durante a configuração inicial, o utilizador pode escolher o seu motor padrão. Atualmente suportamos:
- Google Gemini (Padrão:
gemini-2.5-flash) - DeepSeek (Padrão:
deepseek-chat)
Pode alternar dinamicamente os modelos configurando as variáveis GEMINI_API_MODEL ou DEEPSEEK_API_MODEL no seu arquivo ~/.gitpr/.env, ou alternar em tempo real usando a flag --provider.
Em vez de esconder as instruções da IA no código fonte, o GitPR utiliza arquivos Markdown locais que atuam como System Instructions. Ao rodar gitpr -s, os seguintes arquivos são gerados na raiz do seu projeto para poder customizar a "persona" da IA de acordo com as regras de negócio da sua empresa:
.gitpr.commit.md: Regras para geração das mensagens curtas de commit..gitpr.pr.md: Estrutura de tópicos exigida para a descrição do Pull Request..gitpr.review.md: Define o foco de arquitetura (ex: SOLID, Clean Code) para a análise de diffs..gitpr.filereview.md: Define regras rígidas de coesão e acoplamento para auditoria de um ficheiro completo (usado com--input).
Para manter este README conciso, detalhamos as implementações mais avançadas e focadas em DevOps e Integração Contínua em documentos separados.
Se você deseja implementar o GitPR como uma barreira de qualidade automatizada na sua equipe, consulte os guias abaixo:
- Guia de Git Hooks Locais (Shift-Left): Como usar o
gitpr --installhookspara criar travas na máquina do desenvolvedor (bloqueio de console.log, localhost, etc.) e usar a IA para escrever mensagens de commit automaticamente no editor. - Integração com CI/CD (GitHub Actions): Como rodar o GitPR no seu pipeline na nuvem para realizar a validação estática e travar o botão de "Merge" de Pull Requests que violem as regras do projeto.
O GitPR possui um motor inteligente de cache baseado em MD5. Sempre que você rodar um comando (--review, --commit, etc.), a ferramenta gera um hash exato do seu código atual (diff) e das instruções.
Se você rodar o mesmo comando novamente sem ter alterado o código, o GitPR intercepta a requisição e devolve o resultado instantaneamente (em milissegundos) a partir da pasta ~/.gitpr/cache/prompts/, poupando seu tempo e suas cotas da API do Gemini!
Nunca mais se preocupe em baixar novas versões manualmente. O GitPR possui um Guardião de Conexão e um atualizador embutido:
- Ele verifica a disponibilidade de rede antes de iniciar para não travar seu fluxo offline.
- Em cada execução, ele verifica silenciosamente se há um novo release oficial na API do GitHub.
- Você pode forçar a busca e instalação rodando
gitpr --updateougitpr -u. - A ferramenta utiliza a técnica de Hot-Swap, baixando o novo
.exee substituindo a versão antiga de forma transparente.
Contribuições são muito bem-vindas! Para contribuir:
- Faça um Fork do projeto.
- Crie uma branch para a sua feature (git checkout -b feature/NovaFuncionalidade).
- Faça o commit das suas alterações (git commit -m 'feat: adiciona nova funcionalidade'). Sugestão: Use o próprio GitPR para gerar esta mensagem! 😄
- Faça o Push para a branch (git push origin feature/NovaFuncionalidade).
- Abra um Pull Request.
Projeto idealizado e desenvolvido por:
Natan Fiuza - contato@natanfiuza.dev.br
Este projeto está licenciado sob a GNU Lesser General Public License v2.1 (LGPL-2.1). Consulte o arquivo LICENSE para mais detalhes.