Workflow completo de trabajo con Github: desde la issue hasta el despliegue continuo
Aprende en esta masterclass los conceptos fundamentales de trabajo con proyectos en Github.
Duración total: 01:20:38
Código descargable
Acceso 100% online
¿Qué aprenderás en este vídeo?
Descripción de la masterclass
5 lecciones que aprenderás en de esta masterclass
- Cómo configurar un repositorio GitHub profesional con protecciones y automatizaciones
- Implementar flujo de trabajo con ramas, pull requests y revisiones obligatorias
- Crear GitHub Actions para testing automático, validación y despliegue continuo
- Establecer sistema de monitoreo y alertas para detectar fallos en producción
- Integrar el ecosistema GitHub para documentación
La ilusión de simplicidad
Cuando empiezas a programar, GitHub parece simple. Subes código, haces commits, tal vez colaboras con alguien. Pero la verdad es que estás apenas arañando la superficie de lo que realmente es un flujo profesional de desarrollo.
La mayoría de desarrolladores nunca aprenden el flujo completo. Trabajan años sin saber que existe toda una infraestructura diseñada para proteger el código, automatizar procesos y mantener la calidad. Es como conducir sin conocer las señales de tráfico: funciona hasta que no funciona.
El problema del desarrollador solitario
Hay una tendencia peligrosa entre los que programan solos: pensar que las herramientas de colaboración no les aplican. “¿Para qué voy a crear una pull request si soy yo solo?” se preguntan. Es como preguntarse para qué necesitas un cinturón de seguridad si conduces despacio.
El problema no es la velocidad, es la inevitabilidad del error humano. Cuando trabajas directamente en la rama principal, cada commit es una apuesta. Y en el desarrollo de software, las apuestas siempre terminan mal.
La anatomía de un flujo real
Un flujo de GitHub profesional no es una línea recta del problema a la solución. Es un sistema de checks y balances que se parece más a los protocolos de seguridad de un avión que a escribir en un cuaderno.
El proceso real se ve así:
- Issue tracking: Cada cambio nace de un problema documentado
- Branch protection: La rama principal se vuelve sagrada
- Feature branches: El trabajo se aísla hasta estar listo
- Continuous integration: Las máquinas verifican antes que los humanos
- Code review: Otro par de ojos examina cada línea
- Automated deployment: El código bueno se despliega solo
- Monitoring: Los sistemas vigilan que todo funcione
Cada paso parece innecesario hasta que previene un desastre.
Las plantillas que nadie usa
GitHub permite crear plantillas para issues y pull requests. La mayoría de desarrolladores las ignoran, pensando que es burocracia innecesaria. Pero las plantillas son como los formularios de emergencia: cuando las necesitas, realmente las necesitas.
Una plantilla de issue bien diseñada no es para impresionar; es para forzar el pensamiento estructurado. Te obliga a explicar qué problema resuelves, cómo lo vas a resolver, y qué criterios definen el éxito. Sin esto, es fácil perderse en implementaciones que no resuelven el problema real.
Lo mismo pasa con las plantillas de pull request. Te hacen documentar no solo qué cambiaste, sino por qué lo cambiaste y cómo probaste que funciona.
La protección de ramas como filosofía
Proteger la rama principal es probablemente la decisión más importante que puedes tomar en un proyecto. No es solo una configuración técnica; es una declaración filosófica sobre cómo valoras la estabilidad.
Cuando proteges main, estás diciendo que esa rama representa la verdad. Que el código ahí debe funcionar siempre. Que cada cambio debe ganarse el derecho a entrar.
Esta protección se implementa con reglas específicas:
- Require pull requests: No se puede pushear directamente
- Require reviews: Al menos una persona debe aprobar
- Require status checks: Los tests deben pasar
- Restrict pushes: Solo ciertos usuarios pueden hacer bypass
Estas reglas parecen obstáculos hasta que previenen que alguien suba código roto un viernes a las 6 PM.
GitHub Actions: la automatización que importa
Las GitHub Actions son lo más parecido a tener un asistente robot que nunca se cansa ni comete errores de distracción. Cada vez que alguien propone un cambio, las Actions ejecutan una serie de verificaciones automáticas.
Un pipeline típico incluye:
- Instalación de dependencias: npm ci, no npm install
- Ejecución de tests: Si fallan, se detiene todo
- Verificación de sintaxis: Linters y formatters
- Auditoría de seguridad: npm audit para vulnerabilidades
- Build del proyecto: Confirmar que compila
Lo brillante de esto es que sucede antes de que un humano dedique tiempo a revisar. Las máquinas atrapan los errores obvios, liberando a las personas para encontrar problemas más sutiles.
Las pull requests como conversaciones
El arte de la revisión de código
Una pull request no es solo una propuesta de cambio; es el inicio de una conversación sobre el código. Pero como toda conversación, puede salir terriblemente mal si no entiendes las reglas implícitas.
El problema con muchas code reviews es que se enfocan en lo superficial: naming, indentación, pequeños detalles de estilo. Estas cosas importan, pero son las menos importantes. Una buena review examina:
- Lógica: ¿El código hace lo que dice que hace?
- Edge cases: ¿Qué pasa con inputs inesperados?
- Performance: ¿Hay bottlenecks obvios?
- Mantenibilidad: ¿Será fácil cambiar esto en 6 meses?
- Seguridad: ¿Hay vulnerabilidades potenciales?
La psicología de las sugerencias
GitHub permite hacer sugerencias directas de código en las reviews. Esto parece una mejora puramente técnica, pero cambia fundamentalmente la psicología de la colaboración.
Cuando sugieres un cambio específico en lugar de solo comentar que algo está mal, reduces la fricción mental. La persona que revisa puede ver exactamente qué propones, y quien recibe la review puede aplicar el cambio con un click.
Esto elimina el ciclo de “necesitas cambiar X” → “¿cómo?” → “así” → “ah, entiendo” → implementar. La sugerencia directa convierte la crítica en colaboración.
El poder del número de issue
Hay un detalle que la mayoría pasa por alto: relacionar commits con issues usando el número precedido por #. Esto no es solo documentación; es creación de contexto histórico.
Cuando escribes fixes #1
en un commit, GitHub automáticamente:
- Enlaza el commit con la issue
- Cierra la issue cuando se hace merge
- Crea un trail navegable del problema a la solución
Meses después, cuando te preguntes por qué existe cierto código, puedes rastrear desde el commit hasta la issue original y entender el contexto completo.
La integración continua como red de seguridad
Tests que valen la pena
Los tests en CI/CD no son para demostrar que tu código funciona; son para demostrar que no rompiste el código de otros. Esta distinción es crucial.
Un buen pipeline de testing ejecuta:
# Tests unitarios: Verifican piezas aisladas
npm run test:unit
# Tests de integración: Verifican que las piezas funcionan juntas
npm run test:integration
# Tests de lint: Verifican consistencia de estilo
npm run lint
# Tests de seguridad: Verifican vulnerabilidades conocidas
npm audit
Cada categoría atrapa diferentes tipos de errores. Los unitarios atrapan lógica rota. Los de integración atrapan interfaces incompatibles. Los de lint atrapan inconsistencias. Los de seguridad atrapan dependencias vulnerables.
El deployment continuo como destino
El verdadero poder del CI/CD aparece cuando confías lo suficiente en tu pipeline para automatizar el deployment. Cuando los tests pasan, el código se despliega automáticamente a producción.
Esto suena aterrador al principio. ¿Qué pasa si algo sale mal? Pero la realidad es opuesta: los deployments automáticos son más seguros que los manuales porque eliminan el error humano.
Los deployments manuales fallan por:
- Olvidar pasos
- Ejecutar comandos en el ambiente equivocado
- Fatiga después de largas sesiones
- Presión de tiempo que lleva a atajos
Los deployments automáticos ejecutan exactamente los mismos pasos cada vez, en el mismo orden, con las mismas verificaciones.
El monitoreo como retroalimentación
Dependabot: el asistente que nunca duerme
Una de las características más subestimadas de GitHub es Dependabot. Automáticamente crea pull requests para actualizar dependencias obsoletas o vulnerables.
Esto parece menor hasta que entiendes que las vulnerabilidades de seguridad aparecen constantemente. Sin Dependabot, tendrías que verificar manualmente cada dependencia, leer changelogs, evaluar riesgos. Con Dependabot, el proceso se reduce a revisar y aprobar.
Health checks automatizados
El monitoreo real va más allá de verificar que tu servidor responde. Necesitas verificar que tu aplicación funciona correctamente. Esto requiere endpoints específicos de health check:
app.get('/health', (req, res) => {
// Verificar conexión a base de datos
// Verificar servicios externos
// Verificar estado de memoria/CPU
res.status(200).json({ status: 'healthy' });
});
Un pipeline de monitoreo puede ejecutar estos checks periódicamente y alertarte cuando algo falla. La clave es fallar rápido y fallar ruidosamente.
Los nombres que importan
Convenciones de branches
El naming de branches no es cosmético; es comunicación asíncrona con tu equipo futuro. Una buena convención incluye:
- Tipo: feature/, bugfix/, hotfix/
- Número de issue: Para trackear el propósito
- Descripción breve: Para entender sin contexto
Ejemplos:
feature/42-add-user-authentication
bugfix/18-fix-memory-leak
hotfix/critical-security-patch
Esta estructura permite que cualquiera entienda qué hace la branch, por qué existe, y dónde encontrar más contexto.
Conventional commits
Los mensajes de commit también siguen convenciones que permiten automatización. El formato estándar es:
type(scope): description
feat(auth): add user login endpoint
fix(api): handle null responses correctly
docs(readme): update installation instructions
Estas convenciones permiten generar changelogs automáticamente, determinar versioning semántico, y filtrar commits por tipo.
La curva de aprendizaje inevitable
Por qué es difícil al principio
El flujo completo de GitHub es cognitivamente pesado porque requiere mantener múltiples modelos mentales simultáneamente:
- El estado del código: ¿Qué branch tiene qué cambios?
- El estado de los tests: ¿Qué está rojo, qué está verde?
- El estado de las reviews: ¿Qué necesita aprobación?
- El estado del deployment: ¿Qué versión está en producción?
Para desarrolladores acostumbrados a trabajar linealmente, esto se siente como sobrecarga innecesaria. Pero esta complejidad no es accidental; es el costo de mantener sistemas estables a escala.
La transición mental necesaria
La transición más difícil es mental: pasar de pensar en código como texto que escribes a pensar en código como sistema que mantienes. Esta transición cambia todo:
- Los commits dejan de ser checkpoints personales y se vuelven comunicación pública
- Las branches dejan de ser experimentos y se vuelven propuestas formales
- Los tests dejan de ser verificación personal y se vuelven contratos públicos
- El deployment deja de ser una tarea y se vuelve un evento automatizado
Por qué vale la pena
Una vez que internalizas el flujo completo, programar se vuelve menos estresante. Sabes que:
- No puedes romper main accidentalmente
- Los tests atraparán errores antes que los usuarios
- Cada cambio será revisado por alguien más
- El deployment sucederá consistentemente
- Los problemas serán detectados rápidamente
Esta infraestructura te libera para enfocarte en resolver problemas en lugar de manejar procesos.
La evolución desde simplicidad
Cómo empezar gradualmente
No necesitas implementar todo de una vez. Una progresión natural es:
- Proteger main: Require pull requests
- Agregar tests básicos: Al menos smoke tests
- Configurar CI: Tests automáticos en PRs
- Agregar code review: Una aprobación requerida
- Automatizar deployment: CD para staging primero
- Agregar monitoreo: Health checks y alertas
Cada paso agrega valor incremental sin sobrecargar el proceso.
Señales de que necesitas más proceso
Sabes que necesitas más proceso cuando:
- Encuentras bugs en producción que los tests deberían haber atrapado
- Pasas más tiempo debuggeando deployments que desarrollando features
- Los cambios de una persona rompen el trabajo de otra
- No puedes identificar cuándo se introdujo un bug específico
- El deployment requiere documentación especial o conocimiento tribal
Estas son señales de que el proceso actual no escala con la complejidad del proyecto.
La mentalidad del flujo completo
Pensar en sistemas, no en código
El flujo completo de GitHub te fuerza a pensar sistémicamente. Cada cambio se evalúa no solo por lo que hace, sino por cómo interactúa con:
- El código existente
- Los tests existentes
- Los usuarios actuales
- Los deployments futuros
- El mantenimiento a largo plazo
Esta perspectiva sistémica es lo que separa a los desarrolladores senior de los junior. No es experiencia técnica; es capacidad de ver las conexiones.
La documentación automática
Cuando usas el flujo completo correctamente, la documentación se genera automáticamente:
- Las issues documentan problemas y decisiones
- Las pull requests documentan cambios y razonamiento
- Los commits documentan progreso incremental
- Los tests documentan comportamiento esperado
- Los deployments documentan qué está en producción
Esta documentación es más valiosa que cualquier wiki porque está directamente conectada al código que describe.
El costo real de no usarlo
El costo de no usar un flujo completo no es evidente al principio. Se acumula gradualmente:
- Time perdido en bugs que se pudieron prevenir
- Estrés de deployments manuales
- Dificultad para onboardear nuevos desarrolladores
- Imposibilidad de rastrear cuándo y por qué se introdujeron cambios
- Miedo a tocar código legacy porque no hay tests
Estos costos se vuelven exponenciales conforme el proyecto crece.
Conclusión: la infraestructura invisible
La mayoría de desarrolladores ven GitHub como un repositorio de código. Pero realmente es una plataforma para construir infraestructura de desarrollo. El flujo completo crea un sistema donde:
- Los errores se detectan antes de llegar a usuarios
- Los cambios se documentan automáticamente
- El código se despliega consistentemente
- Los problemas se rastrean hasta su origen
- La colaboración sucede de forma estructurada
Esta infraestructura es invisible cuando funciona bien. Solo notas su ausencia cuando algo sale mal.
El tiempo que inviertes configurando este flujo no es overhead; es inversión en estabilidad futura. Cada hora que dedicas a configurar protecciones, tests, y automatización te ahorra días de debugging manual más adelante.
En desarrollo de software, como en aviación, los procedimientos parecen innecesarios hasta que previenen un desastre. El flujo completo de GitHub no es burocracia; es el cinturón de seguridad que te permite ir más rápido de forma segura.
Explora los capítulos
1. Presentación y bienvenida al directo [04:10]
Presentación y bienvenida al directo
[01:01]
Explicación del proyecto API de chiquito
[01:04]
Flujo completo de desarrollo que se va a mostrar 🔥
[02:05]
2. Creación de issues y plantillas [06:51]
Creación de issues y plantillas
[01:22]
Configuración de plantillas en .github
[01:29]
Creación de issue: añadir categorías
[01:02]
Labels y asignación de issues
[02:58]
3. Configuración de ramas protegidas [08:19]
Configuración de ramas protegidas
[01:24]
Reglas de protección para rama main 🔥
[01:59]
Requerir pull requests y revisiones
[02:48]
Prueba de protección de rama
[02:08]
4. GitHub Actions y CI/CD [07:12]
GitHub Actions y CI/CD
[00:44]
Explicación de workflows y actions 🔥
[01:05]
Análisis del workflow de testing
[02:06]
Marketplace de GitHub Actions
[00:51]
Ejecución manual de workflows 🔥
[02:26]
5. Estrategias de ramas y desarrollo [10:30]
Estrategias de ramas y desarrollo
[01:50]
Feature branches y convenciones de naming
[01:42]
Uso de la IA para desarrollar funcionalidad
[02:25]
Creación de rama feature/1
[03:32]
Configuración de status checks obligatorios
[01:01]
6. Creación de Pull Request [11:15]
Creación de Pull Request
[02:18]
Process de code review 🔥
[02:51]
Sugerencias de cambios en PR
[03:35]
Aprobación y merge de pull request
[02:31]
7. Manejo de tests fallidos [10:12]
Manejo de tests fallidos
[03:02]
Pull request con tests en rojo
[02:26]
Corrección de errores y push a PR
[02:33]
Review automática con Copilot 🔥
[02:11]
8. Configuración de despliegue automático [09:47]
Configuración de despliegue automático
[03:52]
Creación de workflow de deploy
[03:11]
Configuración de secretos en GitHub
[01:35]
Ejecución del deploy automatizado
[01:09]
9. Monitoreo con Dependabot [04:16]
Monitoreo con Dependabot
[01:55]
Configuración de dependabot.yaml
[01:35]
Pull requests automáticas de dependencias
[00:46]
10. Monitoreo de salud de la aplicación [08:06]
Monitoreo de salud de la aplicación
[02:39]
Workflow de health check y notificaciones 🔥
[02:34]
Configuración de alertas por email
[01:44]
Cierre y resumen del flujo completo
[01:09]
Descubre todo lo que puedes conseguir sucribiéndote a Web Reactiva
Contenido nuevo todas las semanas
Una comunidad de developers colegas en telegram
Desafíos y retos de programación para que mejores tus habilidades
400 horas de contenido en audio y vídeo
Entrevistas y masterclass en directo con los/las mejores profesionales
Precio
24€Matrículaplus15€Al mes
- Contenido disponible 24/7
- Audios y videos
- Retos y desafíos
- Todo el código descargable
- Comunidad de developers
- Acceso premium completo