Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 74 additions & 56 deletions COMMANDS.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ MateCommit es simple de usar. La idea es que te ayude a hacer commits más copad
### Instalación Básica

```bash
# Configurar el idioma a español
matecommit config set-lang --lang es
# Configuración interactiva completa (recomendado)
matecommit config init

# Configurar tu API key de Gemini
matecommit config set-api-key --key tu-api-key
# O si solo querés ver la configuración actual
matecommit config show
```

## Comandos Principales
Expand All @@ -50,7 +50,18 @@ matecommit s --no-emoji

### Configuración Básica

#### Ver toda la configuración
#### Configuración interactiva completa
```bash
matecommit config init
```

Este comando te guía paso a paso para configurar:
- 🌍 **Idioma**: Español o inglés
- 🤖 **IA**: API key de Gemini y modelo
- 🔧 **VCS**: Token de GitHub para resúmenes de PR
- 🎫 **Tickets**: Integración con Jira (opcional)

#### Ver configuración actual
```bash
matecommit config show
```
Expand All @@ -67,58 +78,74 @@ Modelos de IA configurados:
- gemini: gemini-1.5-pro
```

#### Configurar API Key
#### Editar configuración manualmente
```bash
# Configurar la API key de Gemini
matecommit config set-api-key --key tu-api-key
matecommit config edit
```

Abre el archivo de configuración en tu editor preferido para editarlo manualmente.

### Configuración de IA

Ahora podés elegir entre diferentes IAs y modelos:
La configuración de IA se hace a través del comando `config init`:

```bash
# Ver las IAs disponibles
matecommit config set-ai-active
# Configuración interactiva que incluye IA
matecommit config init
```

# Activar Gemini
matecommit config set-ai-active gemini
Durante el proceso te va a preguntar:
- 🤖 **API Key de Gemini**: Tu clave para usar Gemini
- 🧠 **Modelo**: Qué modelo usar (gemini-1.5-flash, gemini-1.5-pro, etc.)

# Configurar el modelo de Gemini
matecommit config set-ai-model gemini gemini-1.5-pro
**Nota**: Actualmente solo soporta Gemini, pero próximamente vamos a agregar OpenAI y Claude.

# O si preferís OpenAI
matecommit config set-ai-active openai
matecommit config set-ai-model openai gpt-4
### Integración con Jira

La configuración de Jira también se hace con `config init`:

```bash
# Configuración interactiva que incluye Jira
matecommit config init
```

### Integración con Jira
Durante el proceso te va a preguntar si querés habilitar Jira y te pedirá:
- 🌐 **Base URL**: La URL de tu instancia de Jira
- 📧 **Email**: Tu email de Jira
- 🔑 **API Token**: Tu token de API de Jira

Si laburás con Jira, tenés estas opciones:
### Configuración de VCS

La configuración de VCS se hace con `config init`:

```bash
# Configurar las credenciales
matecommit config jira \
--base-url https://tu-empresa.atlassian.net \
--api-key tu-api-key \
--email tu@email.com
# Configuración interactiva que incluye VCS
matecommit config init
```

# Activar la integración
matecommit config ticket enable
Durante el proceso te va a preguntar si querés habilitar VCS y te pedirá:
- 🔑 **Token de GitHub**: Tu Personal Access Token (recomendamos classic tokens)

# Desactivar la integración
matecommit config ticket disable
**Importante para repositorios de organizaciones**:
- Usá **Personal access tokens (classic)** en lugar de fine-grained tokens
- Los classic tokens funcionan mejor con organizaciones sin necesidad de aprobación

Una vez configurado, podés usar:
```bash
# Resumir un Pull Request
matecommit summarize-pr --pr-number 42
matecommit spr -n 42 # alias corto
```

### Idiomas

```bash
# Cambiar el idioma default
matecommit config set-lang --lang es # español
matecommit config set-lang --lang en # inglés
# Configurar idioma default (se hace en config init)
matecommit config init # te pregunta el idioma

# O usar otro idioma solo para una sugerencia
matecommit s -l en # sugerencia en inglés
matecommit s -l es # sugerencia en español
```

## Ejemplos con Salidas
Expand Down Expand Up @@ -174,56 +201,47 @@ matecommit s
💡 feat(PROJ-123): implementa nuevo endpoint de usuarios
```

### Configuración de VCS

Configura proveedores de control de versiones (GitHub, GitLab, etc.):
```bash
+# Configurar un proveedor VCS (ej: GitHub)
+matecommit config set-vcs \
--provider github \
--token tu-token \
--owner tu-usuario \
--repo tu-repositorio

# Establecer el proveedor VCS activo
matecommit config set-active-vcs --provider github
# Resumir un Pull Request (requiere VCS configurado)
matecommit summarize-pr --pr-number 42
matecommit spr -n 42 # alias corto
```

### Ejemplo 4: Resumen de PR con VCS
```bash
matecommit spr -n 42
✅ PR #42 actulizado: Implementacion de repository
✅ PR #42 actualizado: Implementación de repository
```

## Tips y Trucos

1. **Alias Rápidos**:
- Usá `s` en lugar de `suggest`
- Usá `spr` en lugar de `summarize-pr`
- `config show` te muestra todo de una

2. **Mejores Prácticas**:
- Siempre hacé `git add` antes de usar MateCommit
- Si no te convence ninguna sugerencia, apretá 0 y pedí más
- Usá classic tokens para GitHub en lugar de fine-grained tokens

3. **Personalización**:
- Probá diferentes IAs hasta encontrar la que mejor te funcione
- Podés tener diferentes modelos configurados para cada IA
- Probá diferentes modelos de Gemini hasta encontrar el que mejor te funcione
- Los emojis son opcionales pero le dan más onda 😎
- Podés tener un idioma default y usar otro para commits específicos

4. **Integración con Jira**:
- Activala solo si trabajás con tickets
- Te agrega automáticamente el número de ticket en los commits

5. **Idiomas**:
- Podés tener un idioma default y usar otro para commits específicos
- El análisis técnico se adapta al idioma elegido
5. **Configuración**:
- Usá `config init` para configurar todo de una vez
- Si algo no te gusta, podés editarlo con `config edit`
- Siempre podés volver a ejecutar `config init` para cambiar algo

6. **Repositorios de Organización**:
- Para repos de organizaciones, usá Personal Access Tokens (classic)
- Los fine-grained tokens requieren aprobación de la organización

¿Necesitás más ayuda? Siempre podés usar:
```bash
matecommit --help
# o para un comando específico
matecommit config --help
matecommit suggest --help
matecommit summarize-pr --help
```
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@

4. **Configuración inicial**:
```bash
# Configura tu API key de Gemini
matecommit config set-api-key --key <tu-api-key>
# Configuración interactiva completa
matecommit config init

# Establece tu idioma preferido
matecommit config set-lang --lang es # o en para inglés
# O si solo querés ver la configuración actual
matecommit config show
```

### Desde el código fuente
Expand Down
24 changes: 12 additions & 12 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ package main
import (
"context"
"fmt"
"log"
"net/http"
"os"

"github.com/Tomas-vilte/MateCommit/internal/cli/command/config"
"github.com/Tomas-vilte/MateCommit/internal/cli/command/handler"
"github.com/Tomas-vilte/MateCommit/internal/cli/command/pr"
Expand All @@ -16,9 +20,6 @@ import (
"github.com/Tomas-vilte/MateCommit/internal/infrastructure/tickets/jira"
"github.com/Tomas-vilte/MateCommit/internal/services"
"github.com/urfave/cli/v3"
"log"
"net/http"
"os"
)

func main() {
Expand Down Expand Up @@ -56,12 +57,16 @@ func initializeApp() (*cli.Command, error) {
gitService := git.NewGitService()
aiProvider, err := gemini.NewGeminiService(context.Background(), cfgApp, translations)
if err != nil {
log.Fatalf("Error initializing AI service: %v", err)
log.Printf("Warning: %v", err)
log.Println("La IA no está configurada. Podés configurarla con 'matecommit config init'")
aiProvider = nil
}

aiSummarizer, err := gemini.NewGeminiPRSummarizer(context.Background(), cfgApp, translations)
if err != nil {
log.Fatalf("Error al crear el servicio: %v", err)
log.Printf("Warning: %v", err)
log.Println("El resumidor de PRs está deshabilitado hasta configurar la IA (Gemini).")
aiSummarizer = nil
}

ticketService := jira.NewJiraService(cfgApp, &http.Client{})
Expand All @@ -73,13 +78,8 @@ func initializeApp() (*cli.Command, error) {
registerCommand := registry.NewRegistry(cfgApp, translations)

prServiceFactory := factory.NewPrServiceFactory(cfgApp, translations, aiSummarizer, gitService)
prService, err := prServiceFactory.CreatePRService()
if err != nil {
log.Printf("Warning: %v", err)
log.Println("Algunos comandos estan desactivados, configura el vcs")
}

prCommand := pr.NewSummarizeCommand(prService)
prCommand := pr.NewSummarizeCommand(prServiceFactory)

if err := registerCommand.Register("suggest", suggest.NewSuggestCommandFactory(commitService, commitHandler)); err != nil {
log.Fatalf("Error al registrar el comando 'suggest': %v", err)
Expand All @@ -96,7 +96,7 @@ func initializeApp() (*cli.Command, error) {
return &cli.Command{
Name: "mate-commit",
Usage: translations.GetMessage("app_usage", 0, nil),
Version: "1.2.0",
Version: "1.3.0",
Description: translations.GetMessage("app_description", 0, nil),
Commands: registerCommand.CreateCommands(),
}, nil
Expand Down
10 changes: 2 additions & 8 deletions internal/cli/command/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,9 @@ func (c *ConfigCommandFactory) CreateCommand(t *i18n.Translations, cfg *config.C
Aliases: []string{"c"},
Usage: t.GetMessage("config_command_usage", 0, nil),
Commands: []*cli.Command{
c.newSetLangCommand(t, cfg),
c.newShowCommand(t, cfg),
c.newSetAPIKeyCommand(t, cfg),
c.newSetJiraConfigCommand(t, cfg),
c.newSetTicketCommand(t, cfg),
c.newSetAIActiveCommand(t, cfg),
c.newSetAIModelCommand(t, cfg),
c.newSetActiveVCSCommand(t, cfg),
c.newSetVCSConfigCommand(t, cfg),
c.newInitCommand(t, cfg),
c.newEditCommand(t, cfg),
},
}
}
7 changes: 4 additions & 3 deletions internal/cli/command/config/config_test.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package config

import (
"github.com/Tomas-vilte/MateCommit/internal/config"
"github.com/Tomas-vilte/MateCommit/internal/i18n"
"github.com/stretchr/testify/assert"
"os"
"path/filepath"
"testing"

"github.com/Tomas-vilte/MateCommit/internal/config"
"github.com/Tomas-vilte/MateCommit/internal/i18n"
"github.com/stretchr/testify/assert"
)

func setupConfigTest(t *testing.T) (*config.Config, *i18n.Translations, string, func()) {
Expand Down
46 changes: 46 additions & 0 deletions internal/cli/command/config/edit.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package config

import (
"context"
"fmt"
"os"
"os/exec"

"github.com/Tomas-vilte/MateCommit/internal/config"
"github.com/Tomas-vilte/MateCommit/internal/i18n"
"github.com/urfave/cli/v3"
)

func (c *ConfigCommandFactory) newEditCommand(t *i18n.Translations, cfg *config.Config) *cli.Command {
return &cli.Command{
Name: "edit",
Usage: t.GetMessage("config_edit_usage", 0, nil),
Action: editConfigAction(cfg),
}
}

func editConfigAction(cfg *config.Config) cli.ActionFunc {
return func(ctx context.Context, command *cli.Command) error {
editor := os.Getenv("EDITOR")
if editor == "" {
if _, err := exec.LookPath("nano"); err == nil {
editor = "nano"
} else if _, err := exec.LookPath("vim"); err == nil {
editor = "vim"
} else {
return fmt.Errorf("ningun editor de texto definido. Por favor, configure la variable de entorno $EDITOR")
}
}

cmd := exec.Command(editor, cfg.PathFile)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

if err := cmd.Run(); err != nil {
return fmt.Errorf("error al abrir el editor: %w", err)
}

return nil
}
}
Loading
Loading