Опубликовали инструмент для кроссплатформенной сборки приложений Qt на GitHub
На одном из наших проектов, согласно запросу заказчика, требовалась сборка приложения для десктопа и планшета. Более того, приложение должно быть совместимым не только с различными платформами, но и с операционными системами Windows и Linux. Поскольку в качестве основного языка разработки был выбран C++, то инструмент для разработки UI приложения был очевиден: Qt framework.
О том, как была реализована задача настройки CI на GitHub для автоматической сборки проекта, нам рассказал менеджер проектов Александр.
“Не смотря на мощность фреймворка Qt, сборка приложений для разных платформ из единых исходников требует дополнительных усилий. Для нас задача выглядела еще более сложной: недостаточно научиться собирать приложения для разных операционок, в идеале хотелось обойтись без билд-машин, а исходный код сборочного окружения хранить в виде исходных кодов проекта. Собирать проект было необходимо в нашем GitLab и там же хранить полученные артефакты сборки. И безо всяких неожиданностей: сборка должна иметь 100% повторяемость и быть независимой от внешних репозиториев.
Выглядит непросто? Да! Тем интереснее!
Я провел небольшое исследование и нашел подходящее базовое решение в мире open-source: проект MXE (ссылка https://mxe.cc/) позволяет подготовить среду сборки приложений Qt для разных целевых платформ и конфигураций. Но, как водится в мире open-source… “Нельзя просто так взять, и собрать MXE в нужной тебе конфигурации” (с)
После нескольких безрезультатных попыток, полуночных бдений и пары стертых бубнов, а также отчетливого понимания, что моих знаний для этого таинства явно недостаточно, я призвал на помощь “старшего товарища” – Кирилла.
В итоге совместными усилиями нам удалось реализовать задуманное. Была подготовлена среда сборки с необходимыми зависимостями в виде набора из docker image. Был настроен CI в GitLab: на основе нужного image стартует сборочный контейнер, что позволяет получить “заветный набор” из EXE и DLL для Windows. А дальше – дело техники.
Сейчас сборка нашего проекта выглядит строго и стройно: разработчики создают коммит в удаленном репозитории, который запускает пайплайн в GitLab CI, и через ~5 минут тестовая команда может забрать билд в виде архива с понятным названием прямо из GitLab для проведения тестирования.
Так как мы использовали опыт открытого сообщества для реализации наших планов, я посчитал, что будет правильным разместить результаты нашей работы на GitHub. В результате были подготовлены исходники, проведено ревью кода публичного проекта, и на текущий момент он опубликован: https://github.com/Shtirlitz/BuildQt"
Далее в планах нашей команды: расширить набор docker image для второй целевой платформы Linux и добавить в сборочный проект управление конфигурациями нашего продукта, чтобы на выходе получать готовый дистрибутив в нужной конфигурации и для целевой ОС.