gitpr-cli 0.0.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- __init__.py +1 -0
- ai_providers.py +65 -0
- cache.py +50 -0
- config.py +154 -0
- core.py +305 -0
- gitpr_cli-0.0.11.dist-info/METADATA +211 -0
- gitpr_cli-0.0.11.dist-info/RECORD +15 -0
- gitpr_cli-0.0.11.dist-info/WHEEL +5 -0
- gitpr_cli-0.0.11.dist-info/entry_points.txt +2 -0
- gitpr_cli-0.0.11.dist-info/licenses/LICENSE +502 -0
- gitpr_cli-0.0.11.dist-info/top_level.txt +9 -0
- linter_engine.py +122 -0
- main.py +299 -0
- security.py +42 -0
- updater.py +90 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gitpr-cli
|
|
3
|
+
Version: 0.0.11
|
|
4
|
+
Summary: Automação de PRs, Commits e Code Review com IA (Gemini e DeepSeek)
|
|
5
|
+
Author-email: Natan Fiuza <contato@natanfiuza.dev.br>
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: click>=8.0.0
|
|
10
|
+
Requires-Dist: google-genai
|
|
11
|
+
Requires-Dist: openai
|
|
12
|
+
Requires-Dist: python-dotenv
|
|
13
|
+
Requires-Dist: cryptography
|
|
14
|
+
Requires-Dist: pyyaml
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
|
|
17
|
+
# **GitPR CLI 🚀**
|
|
18
|
+
|
|
19
|
+
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.
|
|
20
|
+
|
|
21
|
+
## **🛠️ Tecnologias e Bibliotecas Utilizadas**
|
|
22
|
+
|
|
23
|
+
Este projeto foi desenvolvido em Python e utiliza as seguintes bibliotecas principais:
|
|
24
|
+
|
|
25
|
+
* [**Click**](https://click.palletsprojects.com/): Para criar uma interface de linha de comando (CLI) robusta e amigável.
|
|
26
|
+
* [**Google GenAI**](https://pypi.org/project/google-genai/): SDK oficial para integração direta com a API do Gemini.
|
|
27
|
+
* [**OpenAI**](https://pypi.org/project/openai/): Biblioteca utilizada devido à sua total compatibilidade com a poderosa API do **DeepSeek**.
|
|
28
|
+
* [**Python-dotenv**](https://pypi.org/project/python-dotenv/): Para a gestão segura de variáveis de ambiente.
|
|
29
|
+
* [**Pytest**](https://docs.pytest.org/): Para execução de testes unitários de forma simples, colorida e legível no console.
|
|
30
|
+
* [**Cryptography**](https://cryptography.io/): Para garantir que sua `GEMINI_API_KEY` seja armazenada de forma encriptada e segura no disco.
|
|
31
|
+
* [**PyYAML**](https://pyyaml.org/): Utilizado para ler e processar as regras customizadas de análise estática do arquivo `.gitpr.linter.yml`.
|
|
32
|
+
|
|
33
|
+
----
|
|
34
|
+
|
|
35
|
+
## 📦 Como Compilar o Executável Localmente
|
|
36
|
+
|
|
37
|
+
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.
|
|
38
|
+
|
|
39
|
+
1. Instale as dependências de desenvolvimento (caso ainda não tenha feito):
|
|
40
|
+
```bash
|
|
41
|
+
pipenv install --dev
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
2. Execute o comando de build apontando para o nosso ponto de entrada (`run.py`):
|
|
45
|
+
```bash
|
|
46
|
+
pipenv run pyinstaller --noconfirm --onefile --icon=icon.ico --name gitpr run.py
|
|
47
|
+
```
|
|
48
|
+
> **Nota técnica:** A flag `--onefile` garante que todo o Python, bibliotecas e dependências ficam comprimidos num único binário, enquanto `--paths src` ajuda o compilador a encontrar os nossos arquivos `core.py` e `config.py`. 🛠️
|
|
49
|
+
|
|
50
|
+
Após a execução deste comando, o PyInstaller vai criar algumas pastas (`build` e `dist`).
|
|
51
|
+
O seu arquivo final e pronto a usar estará dentro da pasta **`dist/`** com o nome `gitpr` (ou `gitpr.exe` no Windows).
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
----
|
|
55
|
+
|
|
56
|
+
## 🧪 Executando Testes
|
|
57
|
+
|
|
58
|
+
Para garantir que a lógica de captura do Git e a integração com a IA estejam funcionando corretamente, utilizamos testes unitários.
|
|
59
|
+
|
|
60
|
+
1. Instale as dependências de teste (caso ainda não tenha feito):
|
|
61
|
+
```bash
|
|
62
|
+
pipenv install --dev pytest
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
2. Execute os testes com o comando:
|
|
66
|
+
```bash
|
|
67
|
+
pipenv run pytest -v
|
|
68
|
+
```
|
|
69
|
+
O Pytest irá detectar automaticamente os arquivos dentro da pasta `tests/` e apresentará um relatório detalhado da execução.
|
|
70
|
+
|
|
71
|
+
----
|
|
72
|
+
## **⚙️ Instalação e Configuração**
|
|
73
|
+
|
|
74
|
+
### **Usando o Executável (Recomendado)**
|
|
75
|
+
|
|
76
|
+
1. Faça o download do arquivo executável gitpr na aba "Releases" do GitHub.
|
|
77
|
+
2. 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).
|
|
78
|
+
3. Na primeira execução, o assistente irá guiá-lo:
|
|
79
|
+
$ gitpr
|
|
80
|
+
```bash
|
|
81
|
+
🚀 Automação Inteligente de PRs com IA
|
|
82
|
+
|
|
83
|
+
🔧 Primeira execução detetada! Vamos configurar o GitPR CLI.
|
|
84
|
+
|
|
85
|
+
🔑 Insira sua GEMINI_API_KEY:
|
|
86
|
+
|
|
87
|
+
📄 Padrão do nome do arquivo de saída [{branch}_{datetime}_PR_DESC.md]:
|
|
88
|
+
````
|
|
89
|
+
*Nota: A sua configuração será guardada em segurança no arquivo `~/.gitpr/.env`.*
|
|
90
|
+
|
|
91
|
+
> **🔒 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.**
|
|
92
|
+
|
|
93
|
+
### A partir do Código-Fonte
|
|
94
|
+
|
|
95
|
+
1. Clone o repositório: `git clone https://github.com/natanfiuza/gitpr.git`
|
|
96
|
+
|
|
97
|
+
2. Entre na pasta: `cd gitpr`
|
|
98
|
+
|
|
99
|
+
3. Atualize o ambiente:
|
|
100
|
+
```bash
|
|
101
|
+
pipenv install google-genai openai python-dotenv click cryptography
|
|
102
|
+
```
|
|
103
|
+
4. Execute: pipenv run python src/main.py
|
|
104
|
+
|
|
105
|
+
## **💻 Como Usar**
|
|
106
|
+
|
|
107
|
+
O GitPR possui um comportamento padrão poderoso e diversas opções avançadas para auxiliar no seu dia a dia como desenvolvedor.
|
|
108
|
+
|
|
109
|
+
### **Comportamento Padrão (Pull Request)**
|
|
110
|
+
Basta executar o comando puro no seu terminal:
|
|
111
|
+
```bash
|
|
112
|
+
gitpr
|
|
113
|
+
```
|
|
114
|
+
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.
|
|
115
|
+
|
|
116
|
+
### **Opções e Comandos Avançados**
|
|
117
|
+
Você pode passar as seguintes *flags* para ações específicas:
|
|
118
|
+
|
|
119
|
+
* `-c` ou `--commit`: Executa um `git diff` local e exibe **apenas a mensagem de commit** sugerida.
|
|
120
|
+
* `-r` ou `--review`: Realiza um **Code Review** detalhado das alterações locais.
|
|
121
|
+
* `-f` ou `--fullreview`: Realiza um **Code Review completo** analisando todas as alterações desde a branch remota.
|
|
122
|
+
* `-i <arquivo>` ou `--input <arquivo>`: **Auditoria de Ficheiro Completo.** Usado obrigatoriamente em conjunto com `-r` ou `-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.
|
|
123
|
+
* `--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`.
|
|
124
|
+
* `-l` ou `--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.
|
|
125
|
+
* `-ih` ou `--installhooks`: Instala automaticamente os **Git Hooks locais** (`pre-commit` e `prepare-commit-msg`) no seu repositório.
|
|
126
|
+
* `-s` ou `--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.
|
|
127
|
+
* `-u` ou `--update`: Verifica e instala a versão mais recente do GitPR (Auto-Updater).
|
|
128
|
+
* `-h` ou `--help`: Exibe o menu de ajuda.
|
|
129
|
+
|
|
130
|
+
> **⚙️ 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.
|
|
131
|
+
|
|
132
|
+
## 🛡️ Linter Local (Análise Estática)
|
|
133
|
+
|
|
134
|
+
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.
|
|
135
|
+
|
|
136
|
+
### Como configurar o `.gitpr.linter.yml`:
|
|
137
|
+
Ao rodar `gitpr --skill`, um modelo será gerado. Você pode configurar regras usando Expressões Regulares (Regex):
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
rules:
|
|
141
|
+
- name: "check-localhost"
|
|
142
|
+
extensions: ["js", "php"] # Extensões que serão validadas
|
|
143
|
+
regex: 'http(s)?://(localhost|127\.0\.0\.1)' # O que procurar
|
|
144
|
+
message: "🚨 Uso de localhost detectado no arquivo {file_name}"
|
|
145
|
+
ignore_comments: true # Ignora se a linha estiver comentada
|
|
146
|
+
ignore_paths: # Pastas ou arquivos ignorados (aceita *)
|
|
147
|
+
- "vendor/*"
|
|
148
|
+
- "node_modules/*"
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
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.
|
|
152
|
+
|
|
153
|
+
## 🧠 Arquitetura Multi-Model (Agnóstico de IA)
|
|
154
|
+
|
|
155
|
+
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:
|
|
156
|
+
* **Google Gemini** (Padrão: `gemini-2.5-flash`)
|
|
157
|
+
* **DeepSeek** (Padrão: `deepseek-chat`)
|
|
158
|
+
|
|
159
|
+
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`.
|
|
160
|
+
|
|
161
|
+
## 🎯 Sistema de "Skills" Customizáveis (Prompt Engineering)
|
|
162
|
+
|
|
163
|
+
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:
|
|
164
|
+
|
|
165
|
+
* `.gitpr.commit.md`: Regras para geração das mensagens curtas de commit.
|
|
166
|
+
* `.gitpr.pr.md`: Estrutura de tópicos exigida para a descrição do Pull Request.
|
|
167
|
+
* `.gitpr.review.md`: Define o foco de arquitetura (ex: SOLID, Clean Code) para a análise de diffs.
|
|
168
|
+
* `.gitpr.filereview.md`: Define regras rígidas de coesão e acoplamento para auditoria de um ficheiro completo (usado com `--input`).
|
|
169
|
+
|
|
170
|
+
## 📚 Documentação Técnica e Guias Avançados
|
|
171
|
+
|
|
172
|
+
Para manter este README conciso, detalhamos as implementações mais avançadas e focadas em **DevOps** e **Integração Contínua** em documentos separados.
|
|
173
|
+
|
|
174
|
+
Se você deseja implementar o GitPR como uma barreira de qualidade automatizada na sua equipe, consulte os guias abaixo:
|
|
175
|
+
|
|
176
|
+
* [**Guia de Git Hooks Locais (Shift-Left)**](docs/local-git-hooks.md): Como usar o `gitpr --installhooks` para 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.
|
|
177
|
+
* [**Integração com CI/CD (GitHub Actions)**](docs/github-ci-linter.md): 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.
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
## ⚡ Sistema de Cache Local (Economia de Quota)
|
|
181
|
+
|
|
182
|
+
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.
|
|
183
|
+
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!
|
|
184
|
+
|
|
185
|
+
## 🔄 Auto-Updater (Atualização Over-The-Air)
|
|
186
|
+
|
|
187
|
+
Nunca mais se preocupe em baixar novas versões manualmente. O GitPR possui um Guardião de Conexão e um atualizador embutido:
|
|
188
|
+
* Ele verifica a disponibilidade de rede antes de iniciar para não travar seu fluxo offline.
|
|
189
|
+
* Em cada execução, ele verifica silenciosamente se há um novo release oficial na API do GitHub.
|
|
190
|
+
* Você pode forçar a busca e instalação rodando `gitpr --update` ou `gitpr -u`.
|
|
191
|
+
* A ferramenta utiliza a técnica de *Hot-Swap*, baixando o novo `.exe` e substituindo a versão antiga de forma transparente.
|
|
192
|
+
|
|
193
|
+
## **🤝 Como Contribuir**
|
|
194
|
+
|
|
195
|
+
Contribuições são muito bem-vindas! Para contribuir:
|
|
196
|
+
|
|
197
|
+
1. Faça um Fork do projeto.
|
|
198
|
+
2. Crie uma branch para a sua *feature* (git checkout \-b feature/NovaFuncionalidade).
|
|
199
|
+
3. 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! 😄
|
|
200
|
+
4. Faça o Push para a branch (git push origin feature/NovaFuncionalidade).
|
|
201
|
+
5. Abra um Pull Request.
|
|
202
|
+
|
|
203
|
+
## **✨ Agradecimentos e Autoria**
|
|
204
|
+
|
|
205
|
+
Projeto idealizado e desenvolvido por:
|
|
206
|
+
|
|
207
|
+
**Natan Fiuza** \- [contato@natanfiuza.dev.br](mailto:contato@natanfiuza.dev.br)
|
|
208
|
+
|
|
209
|
+
## **📄 Licença**
|
|
210
|
+
|
|
211
|
+
Este projeto está licenciado sob a **GNU Lesser General Public License v2.1 (LGPL-2.1)**. Consulte o arquivo LICENSE para mais detalhes.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
__init__.py,sha256=U6ksarernNcryHO20aj4rNG7w0thT7xdMs5KzBJyPvE,28
|
|
2
|
+
ai_providers.py,sha256=P6675oqJePikR_jwaxWboBr6nj9l3ri5HqVUZ7nNpw8,2680
|
|
3
|
+
cache.py,sha256=IqFv7WE-IxYTmm3uBU4SKR2M5v208mTKEbkP2NHIDLc,1723
|
|
4
|
+
config.py,sha256=brAYG7pvKbdy3odPmywG_dgL0i7DgNTBoXo_wILRbPY,6359
|
|
5
|
+
core.py,sha256=xTTxPpEA3-wxipwIqCT1AdtZ-d5NHi8wELZ2r2eNpPE,13329
|
|
6
|
+
linter_engine.py,sha256=ppyMje4qQCf9fMRhWOTxsfKvUBcjNoniu7v20kZ0034,4494
|
|
7
|
+
main.py,sha256=26ZdyzD5vU34kdpHGOOF_RIGuwBZF5GurrCbVdT3zjg,13469
|
|
8
|
+
security.py,sha256=_OKBz_R-3xM8-5XNl_dOUyPCQi6jWDeLoOykZvN1Cys,1355
|
|
9
|
+
updater.py,sha256=enio9PkW0oiUJWA1cp9WdtALYjb4JCEKb_uVHgUT_6o,3774
|
|
10
|
+
gitpr_cli-0.0.11.dist-info/licenses/LICENSE,sha256=UQzLC6mwqb-ZNDkBBAqOxC-SMQcEID0gaM6oFcu6u48,27030
|
|
11
|
+
gitpr_cli-0.0.11.dist-info/METADATA,sha256=EnPVyLbhA40NMa6j0uHewsz_QgFq60_x4NAXICsO7yc,12376
|
|
12
|
+
gitpr_cli-0.0.11.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
13
|
+
gitpr_cli-0.0.11.dist-info/entry_points.txt,sha256=mh_4F_idM4cj0XhfRGBDQb5Nnku93YJ-dyKh5SufwlE,39
|
|
14
|
+
gitpr_cli-0.0.11.dist-info/top_level.txt,sha256=MSkNdrzwxsApkdiz_OTLJm_Hs55R8TFimvC8QkZppDM,76
|
|
15
|
+
gitpr_cli-0.0.11.dist-info/RECORD,,
|