Автоматизация инструментов Qt
Здравствуйте уважаемы хабровчане, не так давно я увлекся программированием на Qt и после написания нескольких программ встал вопрос о том, как развертывать программы на других компьютерах. Как выяснилось делать это не совсем удобно, поэтому я решил написать простенькую небольшую программу, с приятным графическим интерфейсом, в которой можно было бы легко, даже без основных знаний, создать деплой и установщик программы. Всех заинтересованных прошу под кат.

Все началось с того, что нужно было деплоить много разных проектов и каждый раз писать в консоли много букв не хотелось (вот оно молодое поколение!). Так как у меня был опыт работы с qt и qml, я решил запилить свое приложение.
Основные требования были очевидны сразу — программа должна делать деплои и установщики под Windows. У Qt есть windeployqt и Qt Installer Framework для данных задач. Также сразу захотелось добавить автоматическую генерацию файла qmldir и файлов перевода.
Изначально я не стал рисовать дизайн, а просто думал на ходу и делал, это оказалось ошибкой, так как сложно учесть и удержать в голове все детали и возможности программы. Из-за этого первая программа оказалась плохо проработанной и практически не настраиваемой. Но она работала! Для запуска утилит я создаю bat файл, устанавливаю там рабочее окружение:
set PATH=G:\Qt\5.13.2\mingw73_64/bin;G:\Qt\Tools\mingw730_64/bin;%PATH%\n
А дальше прописываю ту утилиту которую мне нужно, с добавленными к ней настроенными пользователем аргументами. С помощью QProcess запускаю данный файл на выполнение. Так делается с развертыванием, установщиком и lupdate ( генерация файлов перевода), в случае с qmldir никакие процессы в принципе не нужны, так как идет простое копирование названий файлов.
Хоть программа и работала, меня она не устраивала, слишком мало настроек, при ошибках в аргументах программа ничего не выводила пользователю. Нужно было переделывать. На этот раз я решил нарисовать все в Figma, разложить все по полочкам, прорефракторить код.

В итоге получилось довольно симпатично на мой взгляд (я далеко не дизайнер). Также переделал окно работы утилиты, теперь она выводит все что пишет утилита в консоль и сообщает о завершении работы симпатичной кнопкой.

После завершения работы над дизайном, начал постепенно переделывать каждую утилиту. В windeployqt изменений почти не было, добавилась только настройка еще одного аргумента. В qmldir добавились функции по выбору модификаторов для каждого файла и выбор версии, генерация файла .*qmltypes с автоматической записью в qmldir. Самые больше изменения коснулись installer, там просто куча параметров, с выбором и настройкой каждого package и файла config.xml с удаленными репозиториями. Программа сама создает структуру папок, файлов настройки (config.xml и package.xml) и заполняет их, также происходит копирование самих пакетов в папку data. Можно создать 3 типа установщиков: только офлайн, только онлайн и совмещённый, есть еще и 4 тип, когда из установщика исключаются определённые пакеты, но я решил что данный функционал не столь важен в первое время и его я добавлю в следующих версиях. Для удаленных установщиков необходимо создавать репозитории с помощью repogen.exe, программа также умеет это делать.
Для работы программы необходимо указать папку Qt на компьютере, путь до компилятора в номере версии Qt и путь до компилятора в папке Tools. Я понимаю что это не самое удобное решение и поэтому в будущих версиях сделаю парсинг папки Qt, с выбором компилятора через ComboBox.
Однако работа еще не закончена до конца, каждый раз вбивать одни и те же значения неудобно, да и неправильно, нужно и это как то автоматизировать, например создать раздел Scripts, где хранить данные для запуска утилит. Также хочется добавить macdeployqt и linuxdeployqt.
P.S. Это моя первая программа, выложенная в открытый доступ широкой публике, буду рад всем замечаниям. Как всегда здоровая критика приветствуется. Также буду очень рад предложениям по увеличению функционала программы.
Комментарии 13
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.