Выпуск зборачнай сістэмы 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

Дадаць каментар