Automação de PRs, Commits e Code Review com IA (Gemini e DeepSeek)
Project description
GitPR CLI 🚀
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.
🛠️ Tecnologias e Bibliotecas Utilizadas
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.
📦 Como Compilar o Executável Localmente
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).
🧪 Executando Testes
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.
⚙️ Instalação e Configuração
Usando o Executável (Recomendado)
- 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.
A partir do Código-Fonte
-
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
💻 Como Usar
O GitPR possui um comportamento padrão poderoso e diversas opções avançadas para auxiliar no seu dia a dia como desenvolvedor.
Comportamento Padrão (Pull Request)
Basta executar o comando puro no seu terminal:
gitpr
A 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.
Opções e Comandos Avançados
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.
🛡️ Linter Local (Análise Estática)
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.
Como configurar o .gitpr.linter.yml:
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.
🧠 Arquitetura Multi-Model (Agnóstico de IA)
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.
🎯 Sistema de "Skills" Customizáveis (Prompt Engineering)
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).
📚 Documentação Técnica e Guias Avançados
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.
⚡ Sistema de Cache Local (Economia de Quota)
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!
🔄 Auto-Updater (Atualização Over-The-Air)
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.
🤝 Como Contribuir
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.
✨ Agradecimentos e Autoria
Projeto idealizado e desenvolvido por:
Natan Fiuza - contato@natanfiuza.dev.br
📄 Licença
Este projeto está licenciado sob a GNU Lesser General Public License v2.1 (LGPL-2.1). Consulte o arquivo LICENSE para mais detalhes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gitpr_cli-0.0.12.tar.gz.
File metadata
- Download URL: gitpr_cli-0.0.12.tar.gz
- Upload date:
- Size: 31.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed1ad8711fe3a7c4005c3c39b5999297a9c94e54e5337f93e6d81097d5cdeef9
|
|
| MD5 |
f0b1cedb0ffd10cab80c8dc6755fde62
|
|
| BLAKE2b-256 |
b4d364c54aef5195a9b29cceb298869b41e4e154a30aae27dac9eb5a5d305408
|
File details
Details for the file gitpr_cli-0.0.12-py3-none-any.whl.
File metadata
- Download URL: gitpr_cli-0.0.12-py3-none-any.whl
- Upload date:
- Size: 33.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a6163837005891cceb4f5746e062f0da75e2a6bc93ec3bf536aced980f4f22e
|
|
| MD5 |
945d23a34dfcad0f818c5c0da7951e14
|
|
| BLAKE2b-256 |
b096867fde7a6fbf10d5ccc63873aa27161383687e0dee76aa65f6580b0f7ba0
|