Gerrit Code Review

Se integra con el sistema de revisión de código Gerrit para revisar cambios y detalles del código.

Documentación

Servidor MCP de Revisión de Gerrit

smithery badge

Este servidor MCP proporciona integración con el sistema de revisión de código Gerrit, permitiendo a los asistentes de IA revisar cambios de código y sus detalles a través de una interfaz simple.

Características

El servidor proporciona un conjunto simplificado de herramientas para la revisión de código:

Obtener Detalles del Cambio

fetch_gerrit_change(change_id: str, patchset_number: Optional[str] = None)
  • Obtiene información completa del cambio, incluyendo archivos y conjuntos de parches
  • Muestra información detallada de diferencias para cada archivo modificado
  • Muestra cambios de archivos, inserciones y eliminaciones
  • Soporta la revisión de conjuntos de parches específicos
  • Devuelve detalles completos del cambio, incluyendo:
    • Información del proyecto y la rama
    • Detalles del autor y los revisores
    • Comentarios e historial de revisiones
    • Modificaciones de archivos con contenido de diferencias
    • Información del conjunto de parches actual

Comparar Diferencias entre Conjuntos de Parches

fetch_patchset_diff(change_id: str, base_patchset: str, target_patchset: str, file_path: Optional[str] = None)
  • Compara diferencias entre dos conjuntos de parches de un cambio
  • Ve diferencias de archivos específicos o todos los archivos modificados
  • Analiza modificaciones de código entre versiones de conjuntos de parches
  • Rastrea la evolución de los cambios a través de iteraciones de revisión

Enviar Comentarios de Revisión

submit_gerrit_review(
    change_id: str,
    message: Optional[str] = None,
    patchset_number: Optional[str] = None,
    labels: Optional[Dict[str, int]] = None,
    comments: Optional[List[Dict[str, Any]]] = None,
    notify: str = "OWNER",
)
  • Publica comentarios de resumen, etiquetas de votación (por ejemplo, {"Code-Review": 1}) y comentarios en línea o a nivel de archivo
  • Apunta a un conjunto de parches específico o usa por defecto la revisión más reciente
  • Controla el comportamiento de notificaciones de Gerrit (notify: NONE, OWNER, OWNER_REVIEWERS, ALL)
  • Los cargamentos de comentarios aceptan diccionarios con path, message y campos opcionales de comentarios de Gerrit (line, side, range, ...)

Ejemplo de Uso

Revisar un cambio completo:

# Fetch latest patchset of change 23824
change = fetch_gerrit_change("23824")

Enviar comentarios de revisión con un voto y comentario en línea:

submit_gerrit_review(
    change_id="23824",
    message="Looks good overall",
    labels={"Code-Review": 1},
    comments=[{"path": "src/app.py", "line": 42, "message": "Nice refactor."}],
    patchset_number="2",           # optional: target a specific patchset
    notify="OWNER_REVIEWERS",      # optional: adjust notification scope
)

Comparar conjuntos de parches específicos:

# Compare differences between patchsets 1 and 2 for change 23824
diff = fetch_patchset_diff("23824", "1", "2")

Ver cambios de archivos específicos:

# Get diff for a specific file between patchsets
file_diff = fetch_patchset_diff("23824", "1", "2", "path/to/file.swift")

Requisitos Previos

  • Python 3.10 o superior (se recomienda Python 3.11)
  • Credenciales de acceso HTTP de Gerrit
  • Contraseña HTTP generada desde la configuración de Gerrit
  • Acceso al repositorio de paquetes mcp[cli] (paquete privado)

Instalación

Instalación mediante Smithery

Para instalar gerrit-code-review-mcp para Claude Desktop automáticamente a través de Smithery:

npx -y @smithery/cli install @cayirtepeomer/gerrit-code-review-mcp --client claude

Instalación Manual

  1. Clona este repositorio:
git clone <repository-url>
cd gerrit-review-mcp
  1. Crea y activa un entorno virtual:
# For macOS/Linux:
python -m venv .venv
source .venv/bin/activate

# For Windows:
python -m venv .venv
.venv\Scripts\activate
  1. Instala este paquete en modo editable con sus dependencias:
pip install -e .

Configuración

  1. Configura las variables de entorno:
export GERRIT_HOST="gerrit.example.com"  # Your Gerrit server hostname (without https://)
export GERRIT_USER="your-username"       # Your Gerrit account username
export GERRIT_HTTP_PASSWORD="your-http-password"  # Generated HTTP password from Gerrit Settings > HTTP Credentials
export GERRIT_EXCLUDED_PATTERNS="\.pbxproj$,\.xcworkspace$,node_modules/"  # Optional: regex patterns for files to exclude from reviews
# Optional TLS configuration for custom or self-signed certificates
export GERRIT_SSL_VERIFY="true"              # Set to 'false' to skip TLS verification in constrained environments
export GERRIT_CA_BUNDLE="/path/to/ca.pem"    # Optional custom CA bundle path used when verification stays enabled
# Note: If both are set, GERRIT_CA_BUNDLE takes precedence and verification stays enabled using that bundle.

O crea un archivo .env:

GERRIT_HOST=gerrit.example.com
GERRIT_USER=your-username
GERRIT_HTTP_PASSWORD=your-http-password
GERRIT_EXCLUDED_PATTERNS=\.pbxproj$,\.xcworkspace$,node_modules/
GERRIT_SSL_VERIFY=true
GERRIT_CA_BUNDLE=/path/to/ca.pem
# If both are set, the CA bundle wins.
  1. Genera la contraseña HTTP:
  • Inicia sesión en tu interfaz web de Gerrit
  • Ve a Configuración > Credenciales HTTP
  • Genera una nueva contraseña
  • Copia la contraseña a tu entorno o archivo .env
  1. Configura exclusiones de archivos (opcional):
  • Establece GERRIT_EXCLUDED_PATTERNS para excluir tipos de archivos específicos de las revisiones de cambios
  • Usa patrones regex separados por comas (por ejemplo, \.pbxproj$,\.xcworkspace$,node_modules/)
  • Déjalo vacío o sin configurar para usar exclusiones predeterminadas
  • Esto ayuda a prevenir bucles infinitos con archivos grandes

Configuración de MCP

Para usar este servidor MCP con Cursor o RooCode, necesitas agregar su configuración a tu archivo ~/.cursor/mcp.json o .roo/mcp.json. Aquí está la configuración requerida:

{
  "mcpServers": {
    "gerrit-review-mcp": {
      "command": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin/python",
      "args": [
        "/path/to/your/workspace/gerrit-code-review-mcp/server.py",
        "--transport",
        "stdio"
      ],
      "cwd": "/path/to/your/workspace/gerrit-code-review-mcp",
      "env": {
        "PYTHONPATH": "/path/to/your/workspace/gerrit-code-review-mcp",
        "VIRTUAL_ENV": "/path/to/your/workspace/gerrit-code-review-mcp/.venv",
        "PATH": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin:/usr/local/bin:/usr/bin:/bin"
      },
      "stdio": true
    }
  }
}

Reemplaza /path/to/your/workspace con la ruta real de tu espacio de trabajo. Por ejemplo, si tu proyecto está en /Users/username/projects/gerrit-code-review-mcp, usa esa ruta en su lugar.

Asegúrate de que todas las rutas en la configuración apunten a:

  • El intérprete de Python de tu entorno virtual
  • El archivo server.py del proyecto
  • El directorio de trabajo correcto
  • El directorio bin del entorno virtual en el PATH

Detalles de Implementación

El servidor usa la API REST de Gerrit para interactuar con Gerrit, proporcionando:

  • Recuperación rápida y confiable de información de cambios
  • Autenticación segura usando autenticación digest HTTP
  • Soporte para varios endpoints REST de Gerrit
  • Código limpio y mantenible
  • Cifrado HTTPS para comunicación segura

Solución de Problemas

Si encuentras problemas de conexión:

  1. Verifica que tu contraseña HTTP esté configurada correctamente en GERRIT_HTTP_PASSWORD
  2. Verifica la configuración de GERRIT_HOST (solo nombre de host, sin https://)
  3. Asegúrate de que el acceso HTTPS esté habilitado en el servidor Gerrit
  4. Prueba la conexión usando curl con el prefijo /a/ para llamadas API autenticadas:
    curl -u "your-username:your-http-password" https://your-gerrit-server.com/a/changes/?q=status:open
    
  5. Verifica los permisos de acceso de Gerrit para tu cuenta

Problemas de Autenticación con Credenciales HTTP

Si tienes problemas con la autenticación, verifica tu configuración de Gerrit para gitBasicAuthPolicy = HTTP (o HTTP_LDAP).

Trabajo con Certificados Autofirmados

  • GERRIT_SSL_VERIFY=false desactiva la verificación TLS cuando Gerrit usa un certificado emitido internamente que carece de las entradas de Nombre Alternativo de Sujeto (SAN) requeridas.
  • Proporciona un paquete de certificados personalizado a través de GERRIT_CA_BUNDLE=/path/to/ca.pem para mantener la verificación habilitada mientras confías en una CA privada.
  • Trata la verificación deshabilitada como una solución temporal hasta que se emita un certificado con SAN coincidentes para los nombres de host de Gerrit que accedes.

Licencia

Este proyecto está licenciado bajo la Licencia MIT.

Pruebas

Este proyecto incluye pruebas integrales de integración con Docker usando testcontainers-python para pruebas multiplataforma confiables.

Ejecutar Pruebas

Para ejecutar el conjunto completo de pruebas:

# Install development dependencies
pip install -e ".[dev]"

# Run all tests
pytest

# Run only integration tests
pytest -m integration

# Run with verbose output
pytest -v

# Run with coverage
pytest --cov=. --cov-report=html

Variables de Entorno de Prueba

Las siguientes variables de entorno se pueden usar para configurar el comportamiento de las pruebas:

  • TEST_STARTUP_TIMEOUT: Tiempo de espera de inicio del contenedor en segundos (predeterminado: 30)
  • TEST_LOGS_SETTLE_DELAY: Retraso antes de verificar registros en segundos (predeterminado: 0)
  • DOCKER_HOST: Host del daemon de Docker para Docker remoto (opcional)

Ejemplo:

# Run tests with custom timeouts
TEST_STARTUP_TIMEOUT=60 TEST_LOGS_SETTLE_DELAY=1 pytest tests/test_docker_integration.py -v

Requisitos de Docker

Las pruebas de integración con Docker requieren:

  • Daemon de Docker en ejecución y accesible
  • Socket de Docker disponible en /var/run/docker.sock (Linux/macOS) o DOCKER_HOST configurado
  • Permisos suficientes para construir y ejecutar contenedores

Las pruebas se omitirán automáticamente si Docker no está disponible.

Integración CI/CD

Para entornos CI/CD, asegúrate de:

  • El servicio Docker-in-Docker (DinD) esté disponible
  • El socket de Docker esté montado o DOCKER_HOST esté configurado
  • Se establezcan valores de tiempo de espera suficientes para entornos más lentos

Contribuciones

¡Damos la bienvenida a las contribuciones! Por favor:

  1. Haz un fork del repositorio
  2. Crea una rama de características
  3. Realiza tus cambios
  4. Ejecuta el conjunto de pruebas para asegurarte de que todo funcione
  5. Envía una solicitud de extracción