Adoptar Bazel para la web a gran escala
Airbnb adoptó recientemente Bazel, la herramienta de compilación de código abierto de Google, como su sistema de compilación universal en las plataformas de backend, web y iOS. El gran repositorio monolítico de la empresa, que consta de más de 11 millones de líneas de código, presentaba desafíos con scripts de compilación personalizados y lógica de caché que eran difíciles de mantener y no escalaban bien. Para abordar estos problemas, Airbnb migró a Bazel, que ofrecía sofisticación, paralelismo, caché y rendimiento.El proceso de migración comenzó en 2021, pero no había un precedente industrial público para integrar Bazel con la web a gran escala fuera de Google. El equipo tuvo que superar problemas de rendimiento al transmitir archivos grandes al entorno remoto y estableció principios de migración que incluían mejorar o mantener el rendimiento general y reducir el impacto en los desarrolladores que contribuían al repositorio monolítico durante la transición.Para preparar el repositorio para Bazel, el equipo realizó la ruptura de ciclos y la generación automática de archivos BUILD.bazel. También migró los trabajos de CI a Bazel, comenzando con la comprobación de tipos, la comprobación de estilo y las pruebas unitarias. El equipo habilitó TypeScript, ESLint y Jest, e introdujo la caché para reducir el tamaño de entrada y mejorar el rendimiento.Para evitar retrocesos, el equipo movió las pruebas de "ocultas" a "requeridas" a través de un atributo de regla y aseguró una única fuente de verdad al no ejecutar pruebas bajo la configuración de Jest que se estaba reemplazando. También escribió un script para comparar antes y después de Bazel para determinar la preparación para la migración utilizando métricas como el tiempo de ejecución de las pruebas, las estadísticas de cobertura de código y la tasa de fallos.En paralelo con la migración de CI, el equipo aseguró que los desarrolladores puedan ejecutar Bazel localmente para reproducir e iterar sobre los fallos de CI. Entregaron una experiencia de Bazel local que es igual o superior a la experiencia de desarrollo existente y el rendimiento, lo que permite a los desarrolladores seguir utilizando herramientas familiares y optar por Bazel cuando sea beneficioso.