Adopter Bazel pour le web à gr... Note

Adopter Bazel pour le web à grande échelle

Airbnb a récemment adopté Bazel, l'outil de construction open source de Google, comme système de construction universel pour les plateformes backend, web et iOS. Le grand répertoire web monolithique de l'entreprise, composé de plus de 11 millions de lignes de code, présentait des défis avec des scripts de construction personnalisés et des logiques de mise en cache difficiles à maintenir et qui ne scalait pas bien. Pour résoudre ces problèmes, Airbnb a migré vers Bazel, qui offrait sophistication, parallélisme, mise en cache et performances.Le processus de migration a commencé en 2021, mais il n'y avait pas de précédent industriel public pour intégrer Bazel avec le web à grande échelle en dehors de Google. L'équipe a dû surmonter des problèmes de performance lors de la transmission de fichiers volumineux vers l'environnement distant et a établi des principes de migration qui incluaient l'amélioration ou le maintien des performances globales et la réduction de l'impact sur les développeurs contribuant au répertoire monolithique pendant la transition.Pour préparer le répertoire pour Bazel, l'équipe a effectué une rupture de cycle et une génération automatique de fichiers BUILD.bazel. Ils ont également migré les travaux CI vers Bazel, en commençant par la vérification de type, la mise en forme et les tests unitaires. L'équipe a activé TypeScript, ESLint et Jest, et a introduit la mise en cache pour réduire la taille d'entrée et améliorer les performances.Pour éviter tout retour en arrière, l'équipe a déplacé les tests de "cachés" à "obligatoires" via un attribut de règle et a assuré une source unique de vérité en ne faisant pas fonctionner les tests sous le setup Jest en cours de remplacement. Ils ont également écrit un script pour comparer avant et après Bazel pour déterminer la prêt à migrer en utilisant des métriques telles que le temps d'exécution des tests, les statistiques de couverture de code et le taux d'échec.En parallèle avec la migration CI, l'équipe a veillé à ce que les développeurs puissent exécuter Bazel localement pour reproduire et itérer sur les échecs CI. Ils ont livré une expérience Bazel locale qui est à la hauteur ou supérieure à l'expérience développeur existante et aux performances, permettant aux développeurs de continuer à utiliser des outils familiers et d'opter pour Bazel lorsque cela est bénéfique.