Monorepo

En muchos sistemas modernos se opta por tener una aplicación web de página única o Single Page Application, en donde obligatoriamente tenemos al menos 2 partes, un backend y un frontend, los dos con diferentes estilos de programación y que deben ejecutarse en la misma versión para que todo funcione correctamente.

Cuando se almacenan estos dos sistemas en diferentes repositorios es difícil mantener la dependencia de versiones, por ejemplo que el frontend tenga una funcionalidad que depende de una función en el backend, si desplegamos solo el frontend corremos el riesgo de tener bugs en producción ya que al tratar de ejecutar esta función el backend no tiene forma de responder.

Hace un año con uno de mis clientes, hice una migración de una estructura multi repositorio a una de único repositorio o monorepo. Realmente fue un cambio significativo en la experiencia de desarrollo, teníamos 4 aplicaciones frontend 2 de administración y 2 portales web, cada una compartía 2 paquetes privados, y una REST API en PHP, por lo que teníamos 9 repositorios de código. Cuando hacíamos cambios era un dolor de cabeza el hacer que todas las dependencias vayan de la mano especialmente cuando hacíamos cambios en los paquetes privados.

Utilice estas herramientas monorepo-tools que permiten importar todos los repositorios a uno solo, sin perder su historia, lo más importante durante este proceso es tratar de cerrar la mayoría de ramas de código para que no se pierda ningún commit.

Para desplegar un monorepo cualquier rama de código siempre está en la correcta dependencia, si una app de frontend usa una función del REST API, estamos seguros que esa función también está en el backend en esa rama, de esa forma al realizar el merge correspondiente, toda la funcionalidad se une a la rama principal y el despliegue es seguro.