Принятие Bazel для веб-разрабо... Заметка

Принятие Bazel для веб-разработки в крупном масштабе

Airbnb недавно принял Bazel, открытый исходный код инструмента сборки Google, в качестве своей универсальной системы сборки на платформах backend, web и iOS. Большой веб-монорепозиторий компании, состоящий из более чем 11 миллионов строк кода, представлял проблемы с настраиваемыми скриптами сборки и логикой кэширования, которые были трудны в поддержке и плохо масштабировались. Чтобы решить эти проблемы, Airbnb перешла на Bazel, который предлагал сложность, параллелизм, кэширование и производительность.Процесс миграции начался в 2021 году, но не было известных в отрасли примеров интеграции Bazel с веб-приложениями в крупном масштабе за пределами Google. Команда должна была преодолеть проблемы с производительностью при передаче больших файлов в удаленную среду и установила принципы миграции, которые включали улучшение или поддержание общей производительности и снижение влияния на разработчиков, вносящих вклад в монорепозиторий во время перехода.Чтобы подготовить репозиторий к Bazel, команда выполнила разрыв циклов и автоматизированную генерацию файла BUILD.bazel. Они также перенесли задания CI в Bazel, начиная с проверки типов, линтинга и тестирования модулей. Команда включила TypeScript, ESLint и Jest и ввела кэширование для уменьшения размера входных данных и улучшения производительности.Чтобы предотвратить регрессию, команда переместила тесты из "скрытых" в "обязательные" через атрибут правила и обеспечила единственный источник истины, не запуская тесты под настройкой Jest, которая заменяется. Они также написали скрипт для сравнения до и после Bazel, чтобы определить готовность к миграции с помощью метрик, таких как время выполнения тестов, статистика покрытия кода и частота сбоев.В параллель с миграцией CI команда обеспечила, чтобы разработчики могли запускать Bazel локально, чтобы воспроизвести и итерировать ошибки CI. Они предоставили локальный опыт Bazel, который равен или превосходит существующий опыт разработчика и производительность, позволяя разработчикам продолжать использовать знакомые инструменты и выбирать Bazel, когда это полезно.