329 lines
7.4 KiB
Markdown
329 lines
7.4 KiB
Markdown
## Actualización Automática de PR
|
|
|
|
## Resumen
|
|
|
|
Un comando que actualiza automáticamente las descripciones y etiquetas de Pull Request. Analiza los cambios de Git para generar y establecer descripciones y etiquetas apropiadas.
|
|
|
|
## Uso
|
|
|
|
```bash
|
|
/pr-auto-update [opciones] [número de PR]
|
|
```
|
|
|
|
### Opciones
|
|
|
|
- `--pr <número>`: Especificar número de PR objetivo (se detecta automáticamente desde la rama actual si se omite)
|
|
- `--description-only`: Actualizar solo la descripción (mantener etiquetas sin cambios)
|
|
- `--labels-only`: Actualizar solo etiquetas (mantener descripción sin cambios)
|
|
- `--dry-run`: Mostrar contenido generado sin realizar actualizaciones reales
|
|
- `--lang <idioma>`: Especificar idioma (es, en)
|
|
|
|
### Ejemplos Básicos
|
|
|
|
```bash
|
|
# Auto-actualizar PR para rama actual
|
|
/pr-auto-update
|
|
|
|
# Actualizar PR específico
|
|
/pr-auto-update --pr 1234
|
|
|
|
# Actualizar solo descripción
|
|
/pr-auto-update --description-only
|
|
|
|
# Verificar con dry-run
|
|
/pr-auto-update --dry-run
|
|
```
|
|
|
|
## Detalles de Características
|
|
|
|
### 1. Auto Detección de PR
|
|
|
|
Detecta automáticamente el PR correspondiente desde la rama actual:
|
|
|
|
- Busca PR abierto relacionado con la rama actual
|
|
- Obtiene información del PR usando GitHub CLI
|
|
- Soporta tanto GitHub.com como GitHub Enterprise
|
|
|
|
### 2. Generación de Descripción
|
|
|
|
Genera automáticamente descripción del PR analizando:
|
|
|
|
- **Análisis de Commits**: Resumen de mensajes de commit
|
|
- **Detección de Cambios**: Cambios principales en archivos
|
|
- **Extracción de Propósito**: Identificación del objetivo del cambio
|
|
- **Referencias de Issues**: Detección automática de #123 mentions
|
|
|
|
### 3. Sugerencia de Etiquetas
|
|
|
|
Sugiere etiquetas apropiadas basadas en:
|
|
|
|
- **Tipo de Cambio**: `enhancement`, `bug`, `documentation`
|
|
- **Área de Impacto**: `frontend`, `backend`, `database`
|
|
- **Prioridad**: `high priority`, `low priority`
|
|
- **Estado**: `work in progress`, `ready for review`
|
|
|
|
### 4. Análisis de Impacto
|
|
|
|
Analiza el impacto de los cambios:
|
|
|
|
- **Archivos Modificados**: Lista de archivos y estadísticas
|
|
- **Dependencias**: Cambios en package.json, Gemfile, etc.
|
|
- **Breaking Changes**: Detección de cambios incompatibles
|
|
- **Cobertura de Tests**: Verificación de tests agregados
|
|
|
|
## Formato de Descripción Generada
|
|
|
|
### Estructura Estándar
|
|
|
|
```markdown
|
|
## 📋 Resumen
|
|
|
|
[Descripción breve del propósito del PR]
|
|
|
|
## 🎯 Objetivo
|
|
|
|
- [Problema que resuelve]
|
|
- [Beneficio que aporta]
|
|
|
|
## 📝 Cambios Realizados
|
|
|
|
- [Cambio principal 1]
|
|
- [Cambio principal 2]
|
|
- [Cambio principal 3]
|
|
|
|
## 🧪 Testing
|
|
|
|
- [ ] Tests unitarios agregados/actualizados
|
|
- [ ] Tests de integración pasando
|
|
- [ ] Probado manualmente
|
|
|
|
## 📊 Impacto
|
|
|
|
- **Archivos modificados**: X archivos
|
|
- **Líneas agregadas**: +XXX
|
|
- **Líneas eliminadas**: -XXX
|
|
|
|
## 📌 Issues Relacionados
|
|
|
|
- Resuelve #123
|
|
- Relacionado con #456
|
|
|
|
## 📸 Capturas de Pantalla
|
|
|
|
[Si aplica, capturas de UI/resultado]
|
|
|
|
## ⚠️ Notas para Revisores
|
|
|
|
[Puntos específicos que necesitan atención]
|
|
```
|
|
|
|
### Personalización por Tipo
|
|
|
|
**Para Features**:
|
|
|
|
- Enfoque en funcionalidad nueva
|
|
- Documentación de uso
|
|
- Ejemplos de implementación
|
|
|
|
**Para Bugfixes**:
|
|
|
|
- Descripción del bug original
|
|
- Causa raíz identificada
|
|
- Solución implementada
|
|
|
|
**Para Refactoring**:
|
|
|
|
- Justificación del cambio
|
|
- Mejoras de rendimiento/mantenibilidad
|
|
- Compatibilidad hacia atrás
|
|
|
|
## Integración con CI/CD
|
|
|
|
### GitHub Actions
|
|
|
|
```yaml
|
|
name: Auto Update PR
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize]
|
|
|
|
jobs:
|
|
update-pr:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Update PR Description
|
|
run: |
|
|
/pr-auto-update --pr ${{ github.event.pull_request.number }}
|
|
```
|
|
|
|
### Pre-commit Hook
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# .git/hooks/pre-push
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
echo "Actualizando PR antes de push..."
|
|
/pr-auto-update --dry-run
|
|
fi
|
|
```
|
|
|
|
## Configuración
|
|
|
|
### Archivo `.pr-auto-update.yml`
|
|
|
|
```yaml
|
|
# Configuración personalizada
|
|
language: es # Idioma por defecto
|
|
labels:
|
|
enabled: true
|
|
custom:
|
|
- "needs-review"
|
|
- "urgent"
|
|
description:
|
|
template: "custom" # usar template personalizado
|
|
include_stats: true
|
|
include_screenshots: false
|
|
```
|
|
|
|
### Variables de Entorno
|
|
|
|
```bash
|
|
export PR_AUTO_UPDATE_LANG=es
|
|
export PR_AUTO_UPDATE_TEMPLATE=detailed
|
|
export GITHUB_TOKEN=ghp_xxxxx
|
|
```
|
|
|
|
## Solución de Problemas
|
|
|
|
### Error: "No se encontró PR asociado"
|
|
|
|
```bash
|
|
# Verificar rama actual
|
|
git branch --show-current
|
|
|
|
# Listar PRs abiertos
|
|
gh pr list
|
|
|
|
# Crear PR si no existe
|
|
gh pr create
|
|
```
|
|
|
|
### Error: "Permisos insuficientes"
|
|
|
|
```bash
|
|
# Verificar autenticación
|
|
gh auth status
|
|
|
|
# Re-autenticar si necesario
|
|
gh auth login
|
|
```
|
|
|
|
### Descripción no se actualiza
|
|
|
|
```bash
|
|
# Forzar actualización
|
|
/pr-auto-update --pr 1234 --force
|
|
|
|
# Verificar cambios locales
|
|
git status
|
|
git diff main...HEAD
|
|
```
|
|
|
|
## Patrones Comunes
|
|
|
|
### Proyecto Flutter
|
|
|
|
```markdown
|
|
Implementado {nombre_funcionalidad} para resolver {problema_usuario}.
|
|
|
|
- **Implementación UI**: Creada nueva pantalla {nombre_pantalla}
|
|
- **Gestión de Estado**: Agregados providers de Riverpod
|
|
- **Integración API**: Implementadas queries y mutaciones GraphQL
|
|
- **Tests**: Agregados tests de widgets y tests unitarios
|
|
|
|
- **Arquitectura**: {patrón_utilizado}
|
|
- **Dependencias**: {paquetes_agregados}
|
|
- **Rendimiento**: {optimizaciones_realizadas}
|
|
```
|
|
|
|
### Proyecto Node.js
|
|
|
|
```markdown
|
|
Implementado endpoint {nombre_API} para {caso_uso}.
|
|
|
|
- **Implementación API**: Creado nuevo endpoint {ruta_endpoint}
|
|
- **Validación**: Agregada lógica de validación de requests
|
|
- **Base de Datos**: Implementadas operaciones en tabla {nombre_tabla}
|
|
- **Tests**: Agregados tests de integración y unitarios
|
|
|
|
- **Autenticación**: Validación de tokens JWT
|
|
- **Autorización**: Control de acceso basado en roles
|
|
- **Validación de Entrada**: Protección contra inyección SQL
|
|
```
|
|
|
|
### Mejora CI/CD
|
|
|
|
```markdown
|
|
Mejorado workflow de GitHub Actions para {efecto_logrado}.
|
|
|
|
- **Rendimiento**: Reducido tiempo de build en {tiempo}
|
|
- **Confiabilidad**: Reforzado manejo de errores
|
|
- **Seguridad**: Mejorada gestión de secretos
|
|
|
|
- **Paralelización**: Ejecución paralela de {nombre_jobs}
|
|
- **Caché**: Optimizada estrategia de caché para {objetivo_cache}
|
|
- **Monitoreo**: Agregado monitoreo de {métricas}
|
|
```
|
|
|
|
## Mejores Prácticas
|
|
|
|
1. **Ejecutar antes de solicitar revisión**: Asegura descripciones actualizadas
|
|
2. **Usar `--dry-run` primero**: Revisa cambios antes de aplicar
|
|
3. **Mantener commits limpios**: Facilita generación de descripción
|
|
4. **Configurar templates**: Consistencia en equipo
|
|
5. **Integrar con CI**: Automatización completa
|
|
|
|
## Casos de Uso Avanzados
|
|
|
|
### Monorepo con Múltiples Packages
|
|
|
|
```bash
|
|
# Detectar cambios por package
|
|
git diff main...HEAD --name-only | grep "^packages/"
|
|
/pr-auto-update
|
|
"Genera descripción separada para cada package modificado"
|
|
```
|
|
|
|
### PR con Múltiples Colaboradores
|
|
|
|
```bash
|
|
# Incluir co-autores
|
|
git log --format="%an <%ae>" | sort -u
|
|
/pr-auto-update
|
|
"Incluye sección de colaboradores en la descripción"
|
|
```
|
|
|
|
### Release PR
|
|
|
|
```bash
|
|
# Para PRs de release
|
|
git log v1.0.0...HEAD --oneline
|
|
/pr-auto-update --labels-only
|
|
"Agrega etiquetas de release y changelog"
|
|
```
|
|
|
|
## Limitaciones
|
|
|
|
- Requiere GitHub CLI instalado y configurado
|
|
- No modifica PRs ya mergeados
|
|
- Límite de 65,536 caracteres en descripción
|
|
- No puede cambiar título del PR (usar `gh pr edit` para eso)
|
|
|
|
## Ver También
|
|
|
|
- `/pr-create` - Crear nuevo PR
|
|
- `/pr-review` - Generar revisión de PR
|
|
- `/commit-message` - Generar mensajes de commit
|
|
- `gh pr` - GitHub CLI para PRs
|