Flujo de Contribución
Esta guía lo acompaña a través del proceso completo de contribuir a XOOPS, desde la configuración inicial hasta la solicitud de cambio fusionada.
Requisitos Previos
Sección titulada «Requisitos Previos»Antes de comenzar a contribuir, asegúrese de tener:
- Git instalado y configurado
- Cuenta de GitHub (gratuita)
- PHP 7.4+ para desarrollo de XOOPS
- Composer para gestión de dependencias
- Conocimiento básico de flujos de trabajo Git
- Familiaridad con el Código de Conducta
Paso 1: Hacer Fork del Repositorio
Sección titulada «Paso 1: Hacer Fork del Repositorio»En la Interfaz Web de GitHub
Sección titulada «En la Interfaz Web de GitHub»- Navegar al repositorio (por ejemplo,
XOOPS/XoopsCore27) - Hacer clic en el botón Fork en la esquina superior derecha
- Seleccionar dónde hacer fork (su cuenta personal)
- Esperar a que se complete el fork
¿Por Qué Hacer Fork?
Sección titulada «¿Por Qué Hacer Fork?»- Obtiene su propia copia para trabajar
- Los mantenedores no necesitan gestionar muchas ramas
- Tiene control total de su fork
- Las Solicitudes de Cambio referencian su fork y el repositorio ascendente
Paso 2: Clonar Su Fork Localmente
Sección titulada «Paso 2: Clonar Su Fork Localmente»# Clonar su fork (reemplazar YOUR_USERNAME)git clone https://github.com/YOUR_USERNAME/XoopsCore27.gitcd XoopsCore27
# Agregar remote ascendente para rastrear repositorio originalgit remote add upstream https://github.com/XOOPS/XoopsCore27.git
# Verificar que los remotes están configurados correctamentegit remote -v# origin https://github.com/YOUR_USERNAME/XoopsCore27.git (fetch)# origin https://github.com/YOUR_USERNAME/XoopsCore27.git (push)# upstream https://github.com/XOOPS/XoopsCore27.git (fetch)# upstream https://github.com/XOOPS/XoopsCore27.git (nofetch)Paso 3: Configurar Entorno de Desarrollo
Sección titulada «Paso 3: Configurar Entorno de Desarrollo»Instalar Dependencias
Sección titulada «Instalar Dependencias»# Instalar dependencias de Composercomposer install
# Instalar dependencias de desarrollocomposer install --dev
# Para desarrollo de módulocd modules/mymodulecomposer installConfigurar Git
Sección titulada «Configurar Git»# Establecer su identidad de Gitgit config user.name "Your Name"git config user.email "your.email@example.com"
# Opcional: Establecer configuración global de Gitgit config --global user.name "Your Name"git config --global user.email "your.email@example.com"Ejecutar Pruebas
Sección titulada «Ejecutar Pruebas»# Asegurarse de que las pruebas pasen en estado limpio./vendor/bin/phpunit
# Ejecutar suite de prueba específica./vendor/bin/phpunit --testsuite unitPaso 4: Crear Rama de Característica
Sección titulada «Paso 4: Crear Rama de Característica»Convención de Nombres de Rama
Sección titulada «Convención de Nombres de Rama»Seguir este patrón: <type>/<description>
Tipos:
feature/- Nueva característicafix/- Arreglo de errordocs/- Solo documentaciónrefactor/- Refactorización de códigotest/- Adiciones de pruebachore/- Mantenimiento, herramientas
Ejemplos:
# Rama de característicagit checkout -b feature/add-two-factor-auth
# Rama de arreglo de errorgit checkout -b fix/prevent-xss-in-forms
# Rama de documentacióngit checkout -b docs/update-api-guide
# Siempre hacer rama desde upstream/main (o develop)git checkout -b feature/my-feature upstream/mainMantener Rama Actualizada
Sección titulada «Mantener Rama Actualizada»# Antes de comenzar el trabajo, sincronizar con upstreamgit fetch upstreamgit merge upstream/main
# Más tarde, si upstream ha cambiadogit fetch upstreamgit rebase upstream/mainPaso 5: Realizar Sus Cambios
Sección titulada «Paso 5: Realizar Sus Cambios»Prácticas de Desarrollo
Sección titulada «Prácticas de Desarrollo»- Escribir código siguiendo Estándares PHP
- Escribir pruebas para nueva funcionalidad
- Actualizar documentación si es necesario
- Ejecutar linters y formateadores de código
Verificaciones de Calidad de Código
Sección titulada «Verificaciones de Calidad de Código»# Ejecutar todas las pruebas./vendor/bin/phpunit
# Ejecutar con cobertura./vendor/bin/phpunit --coverage-html coverage/
# Ejecutar PHP CS Fixer./vendor/bin/php-cs-fixer fix --dry-run
# Ejecutar análisis estático PHPStan./vendor/bin/phpstan analyse class/ src/Hacer Commit de Cambios Buenos
Sección titulada «Hacer Commit de Cambios Buenos»# Verificar qué cambiógit statusgit diff
# Preparar archivos específicosgit add class/MyClass.phpgit add tests/MyClassTest.php
# O preparar todos los cambiosgit add .
# Hacer commit con mensaje descriptivogit commit -m "feat(auth): add two-factor authentication support"Paso 6: Mantener Rama en Sincronización
Sección titulada «Paso 6: Mantener Rama en Sincronización»Mientras trabaja en su característica, la rama main podría avanzar:
# Obtener los cambios más recientes de upstreamgit fetch upstream
# Opción A: Rebase (preferida para historial limpio)git rebase upstream/main
# Opción B: Fusionar (más simple pero agrega commits de fusión)git merge upstream/main
# Si ocurren conflictos, resolverlos luego:git add .git rebase --continue # o git merge --continuePaso 7: Enviar a Su Fork
Sección titulada «Paso 7: Enviar a Su Fork»# Enviar su rama a su forkgit push origin feature/my-feature
# En envíos posterioresgit push
# Si hizo rebase, podría necesitar force push (¡usar con cuidado!)git push --force-with-lease origin feature/my-featurePaso 8: Crear Solicitud de Cambio
Sección titulada «Paso 8: Crear Solicitud de Cambio»En la Interfaz Web de GitHub
Sección titulada «En la Interfaz Web de GitHub»- Ir a su fork en GitHub
- Verá una notificación para crear un PR desde su rama
- Hacer clic en “Compare & pull request”
- O hacer clic manualmente en “New pull request” y seleccionar su rama
Formato de Título y Descripción de PR
Sección titulada «Formato de Título y Descripción de PR»Formato de Título:
<type>(<scope>): <subject>Ejemplos:
feat(auth): add two-factor authenticationfix(forms): prevent XSS in text inputdocs: update installation guiderefactor(core): improve performancePlantilla de Descripción:
## DescripciónBreve explicación de qué hace este PR.
## Cambios- Cambié X de A a B- Agregué característica Y- Arreglé error Z
## Tipo de Cambio- [ ] Nueva característica (agrega nueva funcionalidad)- [ ] Arreglo de error (soluciona un problema)- [ ] Cambio importante (cambio de API/comportamiento)- [ ] Actualización de documentación
## Pruebas- [ ] Agregué pruebas para nueva funcionalidad- [ ] Todas las pruebas existentes pasan- [ ] Realicé pruebas manuales
## Capturas de Pantalla (si es aplicable)Incluir capturas antes/después para cambios de interfaz.
## Problemas RelacionadosCloses #123Related to #456
## Lista de Verificación- [ ] El código sigue directrices de estilo- [ ] Revisé mi propio código- [ ] Comenté código complejo- [ ] Actualicé documentación- [ ] Sin nuevas advertencias generadas- [ ] Las pruebas pasan localmenteLista de Verificación de Revisión de PR
Sección titulada «Lista de Verificación de Revisión de PR»Antes de enviar, asegúrese de:
- El código sigue Estándares PHP
- Las pruebas están incluidas y pasan
- Documentación actualizada (si es necesario)
- Sin conflictos de fusión
- Mensajes de commit claros
- Problemas relacionados referenciados
- Descripción de PR detallada
- Sin código de depuración o console.log
Paso 9: Responder a Retroalimentación
Sección titulada «Paso 9: Responder a Retroalimentación»Durante Revisión de Código
Sección titulada «Durante Revisión de Código»- Leer comentarios cuidadosamente - Entender la retroalimentación
- Hacer preguntas - Si no está claro, pedir aclaración
- Discutir alternativas - Debatir respetuosamente enfoques
- Realizar cambios solicitados - Actualizar su rama
- Force-push commits actualizados - Si reescribir historial
# Realizar cambiosgit add .git commit --amend # Modificar último commitgit push --force-with-lease origin feature/my-feature
# O agregar nuevos commitsgit commit -m "Address feedback on PR review"git push origin feature/my-featureEsperar Iteración
Sección titulada «Esperar Iteración»- La mayoría de PRs requieren múltiples rondas de revisión
- Ser paciente y constructivo
- Ver retroalimentación como oportunidad de aprendizaje
- Los mantenedores podrían sugerir refactorizaciones
Paso 10: Fusionar y Limpiar
Sección titulada «Paso 10: Fusionar y Limpiar»Después de Aprobación
Sección titulada «Después de Aprobación»Una vez que los mantenedores aprueben y fusionen:
- GitHub auto-fusiona o el mantenedor hace clic en fusionar
- Su rama se elimina (generalmente automático)
- Los cambios están en upstream
Limpieza Local
Sección titulada «Limpieza Local»# Cambiar a rama maingit checkout main
# Actualizar main con cambios fusionadosgit fetch upstreamgit merge upstream/main
# Eliminar rama de característica localgit branch -d feature/my-feature
# Eliminar de su fork (si no se eliminó automáticamente)git push origin --delete feature/my-featureDiagrama de Flujo de Trabajo
Sección titulada «Diagrama de Flujo de Trabajo»graph LR A[Fork Repository] --> B[Clone Fork] B --> C[Create Branch] C --> D[Make Changes] D --> E[Commit & Push] E --> F[Create PR] F --> G{Review} G -->|Approved| H[Merge] G -->|Changes Needed| I[Update PR] I --> G H --> J[Cleanup] J --> K[Done]Escenarios Comunes
Sección titulada «Escenarios Comunes»Sincronizar Antes de Comenzar
Sección titulada «Sincronizar Antes de Comenzar»# Siempre comenzar frescogit fetch upstreamgit checkout -b feature/new-thing upstream/mainAgregar Más Commits
Sección titulada «Agregar Más Commits»# Solo enviar de nuevogit add .git commit -m "feat: additional changes"git push origin feature/new-thingSolucionar Errores
Sección titulada «Solucionar Errores»# El último commit tiene mensaje incorrectogit commit --amend -m "Correct message"git push --force-with-lease
# Revertir a estado anterior (¡cuidado!)git reset --soft HEAD~1 # Mantener cambiosgit reset --hard HEAD~1 # Descartar cambiosManejar Conflictos de Fusión
Sección titulada «Manejar Conflictos de Fusión»# Hacer rebase y resolver conflictosgit fetch upstreamgit rebase upstream/main
# Editar archivos con conflictos para resolver# Luego continuargit add .git rebase --continuegit push --force-with-leaseMejores Prácticas
Sección titulada «Mejores Prácticas»- Mantener ramas enfocadas en problemas únicos
- Hacer commits pequeños y lógicos
- Escribir mensajes de commit descriptivos
- Actualizar su rama frecuentemente
- Probar antes de enviar
- Documentar cambios
- Ser receptivo a retroalimentación
- Trabajar directamente en rama main/master
- Mezclar cambios no relacionados en un PR
- Hacer commit de archivos generados o node_modules
- Hacer force push después de que PR sea público (usar —force-with-lease)
- Ignorar retroalimentación de revisión de código
- Crear PRs enormes (dividir en más pequeños)
- Hacer commit de datos sensibles (claves API, contraseñas)
Consejos para el Éxito
Sección titulada «Consejos para el Éxito»Comunicarse
Sección titulada «Comunicarse»- Hacer preguntas en problemas antes de comenzar el trabajo
- Pedir orientación sobre cambios complejos
- Discutir enfoque en la descripción de PR
- Responder a retroalimentación rápidamente
Seguir Estándares
Sección titulada «Seguir Estándares»- Revisar Estándares PHP
- Consultar directrices de Reporte de Problemas
- Leer Descripción General de Contribución
- Seguir Directrices de Solicitud de Cambio
Aprender la Base de Código
Sección titulada «Aprender la Base de Código»- Leer patrones de código existentes
- Estudiar implementaciones similares
- Entender la arquitectura
- Verificar Conceptos Principales
Documentación Relacionada
Sección titulada «Documentación Relacionada»- Código de Conducta
- Directrices de Solicitud de Cambio
- Reporte de Problemas
- Estándares de Codificación PHP
- Descripción General de Contribución
#xoops #git #github #contributing #workflow #pull-request