Bazel
https://bazel.build/
- Новая правильная тулза для сборки всего от гугла (Blaze)
- Несколько конфигурационных файлов (WORKSPACE, BUILD),
- Символьные ссылки на директории с результатами
- Полная сборка, включая все зависимости.
- Кэширование всех артифактов. Говорят, в гугле, все артифакты складываются на какую-то распределенную ФС. Так что если кто-то уже собирал эту версию - тебе не придется, воспользуешься чужими результатами.
- По-факту, инкрементальная сборка должна быть очень быстрая.
- Нет тразитивности при работе с зависимостями. Если A зависит от B, а B зависит от C -> надо прописать C в зависимостях к A.
- Минусы:
- Нельзя (или я не нашел?) как использовать библиотеки, установленные уже в систему через системный менеджер пакетов apt-get и т.д.
- Как следствие, иногда для сборки простейшей библиотеки, нужно собирать или иметь собранным все зависимости
- Чтобы собирать на bazel - нужно иметь хорошую подготовленную инфраструктуру.
- Плевался. Поговорил с гуглеровцами. Комментарий одного из них: он не может разрабатывать opensource, потому что там нет bazel.
- Пользуясь случаем - передаю привет Финисту, я знаю, он нас слушает.
- Я понимаю, что каждый строит свою систему сборки под свои нужды, гугл сделал то, что им нужно, но это далеко не сербрянная пуля.
- Пример: tensorflow-serving: c++ тула, которая работает поверх tensorflow. Написана на C++, 10KLOC. Если устанавливать из бинарей - 250МБ - включая все зависимости. Если собирать в CI - собирается больше 4ч, готовый образ - 7ГБ.
- Пример2: у нас была система сборки и управления системой, сделанная на bash + make. Занимала 10+ файлов, которые легко можно было прочитать и понять. Сейчас ее перевели на bazel, и нужно скачать 1.5ГБ, чтобы оно начало работать.
Package Versioning in Go
https://news.ycombinator.com/item?id=16421966
https://research.swtch.com/vgo-intro
https://research.swtch.com/version-sat