docs: Agregar documentación de merge-pr a GEMINI.md
- Añadir sección completa para el comando merge-pr - Incluir validación de rama dev obligatoria - Agregar ejemplos de uso con diferentes métodos de merge - Documentar verificaciones automáticas del script
This commit is contained in:
parent
4be56fc9f7
commit
345c861037
28
GEMINI.md
28
GEMINI.md
|
@ -56,6 +56,34 @@ python gitea_cli_helper.py close-issue --issue-number 123
|
|||
|
||||
- `--issue-number`: Número del issue a cerrar.
|
||||
|
||||
#### 5. Hacer Merge de un Pull Request
|
||||
|
||||
```bash
|
||||
python gitea_cli_helper.py merge-pr --pr-number 46 --merge-method merge
|
||||
```
|
||||
|
||||
- `--pr-number`: Número del Pull Request a mergear.
|
||||
- `--merge-method`: Método de merge a utilizar. Opciones disponibles: `merge` (default), `squash`, `rebase`.
|
||||
|
||||
**IMPORTANTE**: Solo se permite hacer merge a la rama `dev`. El script validará automáticamente que el PR tenga como destino la rama `dev` antes de proceder. Si el PR apunta a otra rama (como `main`), el merge será rechazado con un mensaje de error.
|
||||
|
||||
**Ejemplo de uso:**
|
||||
```bash
|
||||
# Merge estándar (commit de merge)
|
||||
python gitea_cli_helper.py merge-pr --pr-number 46
|
||||
|
||||
# Merge con squash (un solo commit con todos los cambios)
|
||||
python gitea_cli_helper.py merge-pr --pr-number 46 --merge-method squash
|
||||
|
||||
# Merge con rebase (aplica commits individualmente sobre la rama base)
|
||||
python gitea_cli_helper.py merge-pr --pr-number 46 --merge-method rebase
|
||||
```
|
||||
|
||||
El script también verifica:
|
||||
- Si el PR ya fue mergeado (mostrará mensaje informativo)
|
||||
- Si el PR está cerrado sin mergear (error)
|
||||
- Si el PR tiene conflictos o no es mergeable (error)
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
|
|
@ -25,7 +25,9 @@ def _make_gitea_request(method, endpoint, payload=None):
|
|||
"Content-Type": "application/json"
|
||||
}
|
||||
try:
|
||||
if method == "POST":
|
||||
if method == "GET":
|
||||
response = requests.get(api_url, headers=headers)
|
||||
elif method == "POST":
|
||||
response = requests.post(api_url, headers=headers, data=json.dumps(payload))
|
||||
elif method == "PATCH":
|
||||
response = requests.patch(api_url, headers=headers, data=json.dumps(payload))
|
||||
|
@ -33,7 +35,10 @@ def _make_gitea_request(method, endpoint, payload=None):
|
|||
raise ValueError(f"Unsupported HTTP method: {method}")
|
||||
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
# Some endpoints return empty responses (like merge)
|
||||
if response.text:
|
||||
return response.json()
|
||||
return {}
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error en la solicitud {method} a {api_url}: {e}")
|
||||
if hasattr(e, 'response') and e.response is not None:
|
||||
|
@ -105,6 +110,50 @@ def close_issue(issue_number):
|
|||
_make_gitea_request("PATCH", endpoint, payload)
|
||||
print(f"Issue #{issue_number} cerrado exitosamente.")
|
||||
|
||||
def merge_pull_request(pr_number, merge_method="merge"):
|
||||
"""Merges a pull request (only allowed to dev branch)."""
|
||||
# First, get PR information to check the base branch
|
||||
endpoint = f"repos/{GITEA_USERNAME}/{GITEA_REPO_NAME}/pulls/{pr_number}"
|
||||
print(f"Obteniendo información del PR #{pr_number}...")
|
||||
pr_info = _make_gitea_request("GET", endpoint)
|
||||
|
||||
# Check if PR is already merged
|
||||
if pr_info.get('merged', False):
|
||||
print(f"INFO: El PR #{pr_number} ya fue mergeado.")
|
||||
return
|
||||
|
||||
# Check if PR is closed
|
||||
if pr_info.get('state') == 'closed':
|
||||
print(f"ERROR: El PR #{pr_number} está cerrado y no se puede mergear.")
|
||||
return
|
||||
|
||||
# Check if base branch is 'dev'
|
||||
base_branch = pr_info.get('base', {}).get('ref', '')
|
||||
if base_branch != 'dev':
|
||||
print(f"ERROR: Solo se permite hacer merge a la rama 'dev'.")
|
||||
print(f"Este PR tiene como destino la rama '{base_branch}'.")
|
||||
return
|
||||
|
||||
# Check if PR is mergeable
|
||||
if not pr_info.get('mergeable', False):
|
||||
print(f"ERROR: El PR #{pr_number} no se puede mergear. Puede tener conflictos.")
|
||||
return
|
||||
|
||||
# Proceed with merge
|
||||
merge_endpoint = f"repos/{GITEA_USERNAME}/{GITEA_REPO_NAME}/pulls/{pr_number}/merge"
|
||||
payload = {
|
||||
"do": merge_method,
|
||||
"merge_title_field": pr_info.get('title', ''),
|
||||
"merge_message_field": f"Merge pull request #{pr_number} from {pr_info.get('head', {}).get('ref', '')}\n\n{pr_info.get('title', '')}"
|
||||
}
|
||||
|
||||
print(f"Haciendo merge del PR #{pr_number} a la rama 'dev' usando método '{merge_method}'...")
|
||||
try:
|
||||
_make_gitea_request("POST", merge_endpoint, payload)
|
||||
print(f"PR #{pr_number} mergeado exitosamente a la rama 'dev'.")
|
||||
except Exception as e:
|
||||
print(f"Error al hacer merge del PR #{pr_number}: {e}")
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Helper CLI para interactuar con la API de Gitea.")
|
||||
subparsers = parser.add_subparsers(dest="command", help="Comandos disponibles")
|
||||
|
@ -129,6 +178,12 @@ def main():
|
|||
# Subparser para cerrar issue
|
||||
close_issue_parser = subparsers.add_parser("close-issue", help="Cierra un issue existente.")
|
||||
close_issue_parser.add_argument("--issue-number", type=int, required=True, help="Número del issue a cerrar.")
|
||||
|
||||
# Subparser para merge PR
|
||||
merge_pr_parser = subparsers.add_parser("merge-pr", help="Hace merge de un pull request (solo a rama dev).")
|
||||
merge_pr_parser.add_argument("--pr-number", type=int, required=True, help="Número del pull request.")
|
||||
merge_pr_parser.add_argument("--merge-method", choices=["merge", "squash", "rebase"], default="merge",
|
||||
help="Método de merge: merge, squash o rebase (default: merge).")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
@ -140,6 +195,8 @@ def main():
|
|||
comment_issue(args.issue_number, args.body)
|
||||
elif args.command == "close-issue":
|
||||
close_issue(args.issue_number)
|
||||
elif args.command == "merge-pr":
|
||||
merge_pull_request(args.pr_number, args.merge_method)
|
||||
else:
|
||||
parser.print_help()
|
||||
|
||||
|
|
48
pr_description_issue32.txt
Normal file
48
pr_description_issue32.txt
Normal file
|
@ -0,0 +1,48 @@
|
|||
## Resumen
|
||||
|
||||
Este Pull Request implementa la generación automática de muestras al confirmar órdenes de laboratorio (Issue #32), incluyendo correcciones de traducciones y flujo de trabajo.
|
||||
|
||||
## Funcionalidades principales
|
||||
|
||||
### 1. Generación Automática de Muestras
|
||||
- Al confirmar una orden de laboratorio, se generan automáticamente las muestras necesarias
|
||||
- Los análisis que requieren el mismo tipo de muestra se agrupan en un único contenedor
|
||||
- Cálculo automático del volumen total sumando todos los análisis del grupo
|
||||
- Cada muestra recibe un código de barras único (formato YYMMDDNNNNNNC con dígito verificador Luhn)
|
||||
|
||||
### 2. Flujo de trabajo completo
|
||||
- Estados: Pendiente de Recolección → Recolectada → Recibida → En Proceso → Analizada → Almacenada/Desechada
|
||||
- Agregado método `action_collect()` que faltaba para el estado inicial
|
||||
- Botones de acción visibles según el estado actual
|
||||
|
||||
### 3. Traducciones al español
|
||||
- Todos los campos de modelos traducidos al español
|
||||
- Vistas actualizadas con etiquetas en español
|
||||
- Estados del flujo de trabajo en español
|
||||
- Inicialización de Odoo con idioma español (--load-language es_ES)
|
||||
|
||||
### 4. Notificaciones y manejo de errores
|
||||
- Notificaciones en el chatter de la orden sobre muestras generadas
|
||||
- Advertencias para análisis sin tipo de muestra definido
|
||||
- Manejo robusto de errores sin interrumpir la confirmación de órdenes
|
||||
|
||||
## Cambios técnicos
|
||||
|
||||
- Extendido modelo `sale.order` con campo `generated_sample_ids` y lógica de generación
|
||||
- Mejorado modelo `stock.lot` con campos adicionales y generación de códigos de barras
|
||||
- Actualización de vistas con nuevos campos y mejoras de usabilidad
|
||||
- Script de verificación para pruebas completas
|
||||
- Actualización de CLAUDE.md con timeout de 5 minutos y ubicación de scripts de prueba
|
||||
|
||||
## Pruebas
|
||||
|
||||
- Todas las tareas probadas individualmente con reinicio de instancia efímera
|
||||
- Verificación de logs sin errores en cada paso
|
||||
- Demo data funcional con órdenes confirmadas automáticamente
|
||||
- Criterios de aceptación cumplidos (7 de 8, uno opcional no implementado)
|
||||
|
||||
## Dependencias
|
||||
|
||||
- Requiere Issue #44 (relaciones test-muestra) - Ya completado y mergeado
|
||||
|
||||
Ready for merge to dev branch.
|
Loading…
Reference in New Issue
Block a user