234 lines
7.2 KiB
Markdown
234 lines
7.2 KiB
Markdown
## Crear PR
|
|
|
|
Crea Pull Requests automáticamente analizando tus cambios Git para un flujo de trabajo más fluido.
|
|
|
|
### Uso
|
|
|
|
```bash
|
|
# Auto-crear PR desde tus cambios
|
|
git add . && git commit -m "feat: Implementar autenticación de usuario"
|
|
"Crear un Draft PR con la descripción y etiquetas correctas"
|
|
|
|
# Mantener tu plantilla existente
|
|
cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md
|
|
"Llenar los espacios en blanco pero mantener la estructura de plantilla intacta"
|
|
|
|
# Marcar como listo cuando termine
|
|
gh pr ready
|
|
"Cambiar a Ready for Review después de verificar calidad"
|
|
```
|
|
|
|
### Ejemplos Básicos
|
|
|
|
```bash
|
|
# 1. Crear rama y commit
|
|
git checkout main && git pull
|
|
git checkout -b feat-user-profile
|
|
git add . && git commit -m "feat: Implementar característica de perfil de usuario"
|
|
git push -u origin feat-user-profile
|
|
|
|
# 2. Crear PR
|
|
"Por favor crear un PR:
|
|
1. Verificar qué cambió con git diff --cached
|
|
2. Usar la plantilla PR de .github/PULL_REQUEST_TEMPLATE.md
|
|
3. Elegir hasta 3 etiquetas que coincidan con los cambios
|
|
4. Crearlo como Draft (mantener comentarios HTML)"
|
|
|
|
# 3. Hacer listo después de que CI pase
|
|
"Una vez que CI esté verde, marcar el PR como Ready for Review"
|
|
```
|
|
|
|
### Pasos de Ejecución
|
|
|
|
#### 1. Crear Rama
|
|
|
|
```bash
|
|
# Nomenclatura de rama: {tipo}-{asunto}
|
|
git checkout main
|
|
git pull
|
|
git checkout -b feat-user-authentication
|
|
|
|
# Confirmar que estás en la rama correcta
|
|
git branch --show-current
|
|
```
|
|
|
|
#### 2. Commit
|
|
|
|
```bash
|
|
# Staged tus cambios
|
|
git add .
|
|
|
|
# Commit con mensaje claro
|
|
git commit -m "feat: Implementar API de autenticación de usuario"
|
|
```
|
|
|
|
#### 3. Push al Remoto
|
|
|
|
```bash
|
|
# Primer push (establece upstream)
|
|
git push -u origin feat-user-authentication
|
|
|
|
# Pushes posteriores
|
|
git push
|
|
```
|
|
|
|
#### 4. Crear Draft PR con Análisis Automático
|
|
|
|
**Paso 1: Analizar Cambios**
|
|
|
|
```bash
|
|
# Ver qué archivos cambiaron
|
|
git diff --cached --name-only
|
|
|
|
# Revisar los cambios reales (primeras 1000 líneas)
|
|
git diff --cached | head -1000
|
|
```
|
|
|
|
**Paso 2: Auto-generar Descripción**
|
|
|
|
```bash
|
|
# Prioridad de plantilla:
|
|
# 1. Mantener descripción PR existente como está
|
|
# 2. Usar .github/PULL_REQUEST_TEMPLATE.md
|
|
# 3. Recurrir a plantilla por defecto
|
|
|
|
cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md
|
|
# Llenar solo secciones vacías - no tocar comentarios HTML o separadores
|
|
```
|
|
|
|
**Paso 3: Auto-seleccionar Etiquetas**
|
|
|
|
```bash
|
|
# Obtener etiquetas disponibles (no interactivo)
|
|
"Recuperar etiquetas disponibles de .github/labels.yml o repositorio GitHub y seleccionar automáticamente etiquetas apropiadas basadas en cambios"
|
|
|
|
# Auto-selección por coincidencia de patrones (máx 3)
|
|
# - Documentación: *.md, docs/ → documentation|docs
|
|
# - Pruebas: test, spec → test|testing
|
|
# - Correcciones de errores: fix|bug → bug|fix
|
|
# - Nuevas características: feat|feature → feature|enhancement
|
|
```
|
|
|
|
**Paso 4: Crear PR vía GitHub API (Preservar Comentarios HTML)**
|
|
|
|
```bash
|
|
# Crear PR
|
|
"Crear un Draft PR con la siguiente información:
|
|
- Título: Auto-generado desde mensaje de commit
|
|
- Descripción: Correctamente llenado usando .github/PULL_REQUEST_TEMPLATE.md
|
|
- Etiquetas: Auto-seleccionadas desde cambios (máx 3)
|
|
- Rama base: main
|
|
- Preservar todos los comentarios HTML"
|
|
```
|
|
|
|
### Sistema de Selección Automática de Etiquetas
|
|
|
|
#### Determinar desde Patrones de Archivos
|
|
|
|
- **Documentación**: `*.md`, `README`, `docs/` → `documentation|docs|doc`
|
|
- **Pruebas**: `test`, `spec` → `test|testing`
|
|
- **CI/CD**: `.github/`, `*.yml`, `Dockerfile` → `ci|build|infra|ops`
|
|
- **Dependencias**: `package.json`, `pubspec.yaml` → `dependencies|deps`
|
|
|
|
#### Determinar desde Contenido
|
|
|
|
- **Correcciones de errores**: `fix|bug|error|crash|repair` → `bug|fix`
|
|
- **Nuevas características**: `feat|feature|add|implement|new-feature|implementation` → `feature|enhancement|feat`
|
|
- **Refactoring**: `refactor|clean|restructure` → `refactor|cleanup|clean`
|
|
- **Rendimiento**: `performance|perf|optimize` → `performance|perf`
|
|
- **Seguridad**: `security|secure` → `security`
|
|
|
|
#### Restricciones
|
|
|
|
- **Máx 3 etiquetas**: Límite superior para selección automática
|
|
- **Solo etiquetas existentes**: Prohibido crear nuevas etiquetas
|
|
- **Coincidencia parcial**: Determinado por inclusión de palabra clave en nombres de etiquetas
|
|
|
|
### Pautas del Proyecto
|
|
|
|
#### Enfoque Básico
|
|
|
|
1. **Siempre empezar como Draft**: Todos los PRs deben crearse en estado Draft
|
|
2. **Mejora gradual de calidad**: Fase 1 (Implementación básica) → Fase 2 (Agregar pruebas) → Fase 3 (Actualizar documentación)
|
|
3. **Etiquetas apropiadas**: Agregar siempre hasta 3 etiquetas
|
|
4. **Usar plantillas**: Usar siempre `.github/PULL_REQUEST_TEMPLATE.md`
|
|
5. **Espaciado español**: Agregar siempre espacio de ancho medio entre texto español y alfanuméricos
|
|
|
|
#### Convención de Nomenclatura de Ramas
|
|
|
|
```text
|
|
{tipo}-{asunto}
|
|
|
|
Ejemplos:
|
|
- feat-user-profile
|
|
- fix-login-error
|
|
- refactor-api-client
|
|
```
|
|
|
|
#### Mensajes de Commit
|
|
|
|
```text
|
|
{tipo}: {descripción}
|
|
|
|
Ejemplos:
|
|
- feat: Implementar API de autenticación de usuario
|
|
- fix: Corregir error de login
|
|
- docs: Actualizar README
|
|
```
|
|
|
|
### Sistema de Procesamiento de Plantillas
|
|
|
|
#### Prioridad de Procesamiento
|
|
|
|
1. **Descripción PR existente**: Mantener todo lo que ya está escrito
|
|
2. **Plantilla del proyecto**: Usar `.github/PULL_REQUEST_TEMPLATE.md`
|
|
3. **Plantilla por defecto**: Usar esta si no existe nada más
|
|
|
|
#### Reglas de Preservación de Contenido Existente
|
|
|
|
- **No tocar contenido existente**: Dejar lo que ya está ahí solo
|
|
- **Llenar solo los espacios en blanco**: Agregar contenido donde falta
|
|
- **Mantener comentarios funcionales**: Como `<!-- Copilot review rule -->`
|
|
- **Mantener comentarios HTML**: Todos `<!-- ... -->` permanecen como están
|
|
- **Mantener separadores**: Cosas como `---` se quedan
|
|
|
|
#### Manejo de Preservación de Comentarios HTML
|
|
|
|
**Importante**: GitHub CLI (`gh pr edit`) automáticamente escapa comentarios HTML, y el procesamiento shell puede causar mezcla de strings inválidos como `EOF < /dev/null`.
|
|
|
|
**Soluciones Fundamentales**:
|
|
|
|
1. **Uso de opción --field de GitHub API**: Preservar comentarios HTML con procesamiento de escape apropiado
|
|
2. **Simplificación de Procesamiento de Plantilla**: Evitar procesamiento complejo de pipes y redirecciones
|
|
3. **Enfoque de Preservación Completa**: Abolir procesamiento de eliminación de comentarios HTML, preservar completamente plantillas
|
|
|
|
### Respuestas a Comentarios de Revisión
|
|
|
|
```bash
|
|
# Hacer commit de tus correcciones
|
|
git add .
|
|
git commit -m "fix: Abordar feedback de revisión"
|
|
git push
|
|
```
|
|
|
|
### Notas
|
|
|
|
#### Importancia de Preservación de Comentarios HTML
|
|
|
|
- **Problema de GitHub CLI**: `gh pr edit` escapa comentarios HTML y puede romper cosas
|
|
- **La solución**: Usar opción `--field` de GitHub API para manejo apropiado
|
|
- **Mantener todo**: No eliminar comentarios HTML - mantener toda la plantilla
|
|
|
|
#### Restricciones de Automatización
|
|
|
|
- **No nuevas etiquetas**: Solo puede usar etiquetas de `.github/labels.yml`
|
|
- **Máx 3 etiquetas**: Ese es el límite para auto-selección
|
|
- **No tocar contenido manual**: Nunca cambiar lo que alguien escribió
|
|
|
|
#### Calidad Paso a Paso
|
|
|
|
- **Empezar con Draft**: Cada PR comienza como borrador
|
|
- **Verificar CI**: Ejecutar `gh pr checks` para ver el estado
|
|
- **Marcar como listo**: Usar `gh pr ready` cuando la calidad se vea bien
|
|
- **Seguir la plantilla**: Adherirse a la estructura de tu proyecto
|