Випуск складальної системи Bazel 2.0

доступний випуск відкритого складального інструментарію Bazel 2.0, развиваемого инженерами из Google и используемого для сборки большинства внутренних проектов данной компании. Bazel обеспечивает сборку проекта, запуская необходимые компиляторы и тесты. Поддерживается сборка и тестирование кода на Java, C++, Objective-C, Python, Rust, Go и многих других языках, а также сборка мобильных приложений для Android и iOS. Код проекта поширюється під ліцензією Apache 2.0

Значительное изменение версии связано с добавлением изменений, нарушающих обратную совместимость. Начиная с Bazel 2.0 включены по умолчанию режимы «—incompatible_remap_main_repo» (ссылки по имени и через @ теперь ссылаются на один репозиторий), «—incompatible_disallow_dict_lookup»_(применение нехешируемых ключей),
«—incompatible_remove_native_maven_jar» и «—incompatible_prohibit_aapt1». Среди других изменений:

  • В команді aquery появилась экспериментальная поддержка новой редауции формата вывода «proto» (—output=proto), которая пока отключена по умолчанию (—incompatible_proto_output_v2) и обеспечивает более компактное представление данных;
  • Добавлен флаг «—incompatible_remove_enabled_toolchain_types», позволяющий удалить поле PlatformConfiguration.enabled_toolchain_types;
  • Добавлена защита от загрузки пакетов, при загрузке которых при раскрытии путей используются цикличные символические ссылки;
  • Реализована возможность использования флага «—disk_cache» с внешними кэшами gRPC;
  • В пакет для Debian и бинарный инсталлятор включена улучшенная прослойка, обрабатывающая файлы ~/.bazelversion и переменную окружения $USE_BAZEL_VERSION;
  • В рамках подготовки к переводу файлов с манифестом runfiles в категорию устаревших возможностей добавлен флаг «—experimental_skip_runfiles_manifests».

Серед відмінних рис Bazel виділяються висока швидкість, надійність і повторюваність процесу складання. Для досягнення високої швидкості складання Bazel активно застосовуються техніки кешування і розпаралелювання процесу складання. У BUILD-файлах обов'язково повністю визначені всі залежності, на основі яких приймаються рішення щодо перескладання компонентів після внесення змін (перезбираються тільки файли, що змінилися) і розпаралелювання процесу складання. Інструментарій також гарантує повторюваність збирання, тобто. результат складання проекту на машині розробника повністю збігатиметься зі складанням на сторонніх системах, таких як сервери безперервної інтеграції.

На відміну від Make і Ninja в Bazel застосовується більш високорівневий підхід до побудови правил зборки, при якому замість визначення прив'язки команд до файлів, що збираються, проводиться застосування більш абстрактних готових блоків, таких як «складання виконуваного файлу мовою С++», «складання бібліотеки на C++» або «запуск тесту для C++», а також визначення цільових та складальних платформ. У текстовому файлі BUILD компоненти проекту описуються як зв'язування бібліотек, виконуваних файлів і тестів, без деталізації лише на рівні окремих файлів і команд виклику компілятора. Додаткова функціональність реалізується через механізм підключення розширень.

Поддерживается использование единых сборочных файлов для разных платформ и архитектур, например, один файл сборки без изменений может применяться как для серверной системы, так и для мобильного устройства. Сборочная система изначально спроектирована для оптимальной сборки проектов Google, в том числе сборки очень больших проектов и проектов, содержащих код на нескольких языках программирования, требующих расширенного тестирования и собираемых для нескольких платформ.

Джерело: opennet.ru

Додати коментар або відгук