argus-cs/redmine-message
最新稳定版本:0.1.1
Composer 安装命令:
composer require argus-cs/redmine-message
包简介
Pacote Laravel para enviar mensagens ao Redmine.
README 文档
README
Pacote Laravel para auxiliar na criação e envio de mensagens para tarefas no Redmine, com geração de texto via Gemini usando o diff do Git e diretrizes personalizadas.
Recursos
- Command interativo
gen:redmine-messageque:- Busca detalhes da tarefa no Redmine (assunto, descrição e comentários anteriores);
- Coleta o
git diff(por padrão,--staged; você pode informar um sufixo/range via argumento); - Carrega um arquivo de diretrizes (guideline) para formatar a mensagem;
- Gera o texto via API do Gemini;
- Opcionalmente envia a mensagem como nota para a tarefa no Redmine.
- Cliente HTTP para Redmine (
ArgusCS\RedmineMessage\Services\RedmineClient). - Cliente para executar comandos Git (
ArgusCS\RedmineMessage\Services\GitClient). - Cliente para integração com o Gemini (
ArgusCS\RedmineMessage\Services\GeminiClient). - Publicação de config em
config/messages.php.
Nota: A Facade
RedmineMessageexiste, mas atualmente não há binding registrado para o accessormessages. Portanto, o uso via Facade pode não funcionar até o binding ser ajustado.
Requisitos
- PHP ^8.0
- Laravel 10 ou 11
- symfony/process ^5.4 | ^6.0 | ^7.0
Instalação
Instale via Composer:
composer require argus-cs/redmine-message
Durante desenvolvimento local (path repository), adicione ao composer.json do seu app:
{
"repositories": [
{ "type": "path", "url": "../laravel/redmine-message", "options": { "symlink": true } }
]
}
E então:
composer require argus-cs/redmine-message:dev-main
Este pacote possui auto-discovery: o ArgusCS\\RedmineMessage\\RedmineMessageServiceProvider é registrado automaticamente.
Publicar e configurar
Publique o arquivo de configuração:
php artisan vendor:publish --tag=messages
Isso criará config/messages.php no seu app. Configure as variáveis de ambiente conforme abaixo:
# Gemini GEMINI_URL="https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro:generateContent" # exemplo GEMINI_API_KEY="sua_chave_gemini" # Redmine REDMINE_URL="https://redmine.seudominio.com" REDMINE_API_KEY="sua_chave_redmine" REDMINE_GUIDELINE="/caminho/para/guideline.md" # arquivo com diretrizes para formatação
Notas:
- As chaves de configuração residem em
config/messages.phpe são mescladas sob a keymessages.- A tag de publicação é
messages.
Uso
1) Via Command (recomendado)
php artisan gen:redmine-message
Argumento opcional: diff
- O comando aceita um argumento opcional
diffpara personalizar o sufixo/range passado aogit diff. - Se omitido, será usado
--staged.
Exemplos:
# Padrão (usa --staged) php artisan gen:redmine-message # Usando um sufixo alternativo php artisan gen:redmine-message "--cached" # Usando um range específico php artisan gen:redmine-message "HEAD~1..HEAD" # Diff de um arquivo específico php artisan gen:redmine-message "README.md"
Fluxo do comando:
- Solicita o número do ticket do Redmine;
- Busca detalhes da tarefa no Redmine (incluindo journals/comentários);
- Mostra os detalhes e pede confirmação para continuar;
- Coleta o
git diffusando o sufixo/range informado no argumento (ou--stagedpor padrão); se estiver vazio, o processo é interrompido; - Lê o arquivo de guideline indicado em
REDMINE_GUIDELINE; - Monta um prompt contendo: diff, guideline, ticket, detalhes da tarefa, comentários anteriores e nome da branch;
- Envia o prompt para o Gemini e exibe a mensagem gerada;
- Pergunta se deseja enviar a mensagem como nota na tarefa do Redmine; se sim, envia via API.
Dica: use
git addpara preparar (staged) as alterações que deseja considerar no diff antes de executar o comando.
2) Uso programático (clientes de serviço)
- Buscar detalhes de uma tarefa:
use ArgusCS\RedmineMessage\Services\RedmineClient; $redmine = new RedmineClient(); $task = $redmine->task('12345', 'issue'); // retorna a chave 'issue' do JSON
- Adicionar uma nota em uma tarefa:
$redmine->addTaskNote('12345', "Mensagem gerada automaticamente...");
- Obter diff e branch via Git:
use ArgusCS\RedmineMessage\Services\GitClient; $git = new GitClient(); $diff = $git->diff(); // por padrão '--staged' $branch = trim($git->nameBranch());
- Gerar conteúdo via Gemini:
use ArgusCS\RedmineMessage\Services\GeminiClient; $gemini = new GeminiClient(); $response = $gemini->generate($prompt); $text = $response->json('candidates.0.content.parts.0.text');
Como funciona (arquitetura)
RedmineMessageServiceProvider:- Faz merge da config
config/messages.phppara a keymessages; - Publica a config via tag
messages; - Registra o comando
gen:redmine-messagequando em console.
- Faz merge da config
GenMessage(Command): orquestra a interação com Redmine, Git e Gemini, permite injeção de dependências (DI) paraRedmineClient,GitClienteGeminiCliente oferece a opção de enviar a nota para o Redmine.RedmineClient:- GET
REDMINE_URL/issues/{ticket}.json?include=journalspara buscar tarefa; - PUT
REDMINE_URL/issues/{ticket}.jsoncom body{ issue: { notes: "..." } }para adicionar nota.
- GET
GeminiClient: POST paraGEMINI_URLcom headerx-goog-api-keye payload esperado pelo endpointgenerateContent.GitClient: executa processos locaisgit diffegit rev-parse.
Testes
composer install vendor/bin/phpunit
- Há testes de unidade para
RedmineCliente testes E2E para o comandogen:redmine-message. - Os testes E2E usam DI para substituir
GitClienteGeminiClientpor fakes eHttp::fake()para simular chamadas externas.
Troubleshooting
- Mensagem: "Sem alterações encontradas." — certifique-se de ter arquivos staged (
git add ...). - Erro ao ler guideline — verifique se
REDMINE_GUIDELINEaponta para um arquivo existente e acessível. - Erro ao conectar no Gemini — confirme
GEMINI_URLeGEMINI_API_KEYe se o endpoint usado é compatível (ex.:generateContent). - Erro ao conectar no Redmine — confirme
REDMINE_URLeREDMINE_API_KEYe se o usuário possui permissão para adicionar notas.
Roadmap / Itens para avaliação
- Registrar binding para a Facade
RedmineMessage(accessormessages). - Remover import não utilizado no ServiceProvider (ex.:
SendRedmineMessage). - Padronizar nomes e chaves de config sob
messages. - Tratar timeouts/retries nas chamadas HTTP (Gemini e Redmine) e permitir configurar.
- Opcional: permitir escolher o projeto do Redmine e outros campos no envio da nota.
Licença
Distribuído sob a licença MIT. Consulte o arquivo LICENSE.
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-10-31