Building Qt Creator plugins with GitHub Actions
December 18, 2019 by Cristian Adam | Comments
Qt Creator is a cross platform, highly modular, Qt C++ application.In order to build a Qt Creator plugin you need:
- A C++ compiler
- The Qt SDK
- The Qt Creator SDK
Not many plugin developers know that Qt Creator is shipping an SDK. You don't need to compile Qt Creator in order to develop a Qt Creator plugin. Also having access to all three platforms (Windows, Linux, macOS) is not a common thing for most C++ developers.
GitHub Actions
GitHub Actions is a CI/CD infrastructure provided by GitHub which would give access to all three platforms!
GitHub is also hosting a few Qt Creator plugin repositories, so I decided to try to build the Doxygen plugin (my fork with the GitHub Actions script).
GitHub Actions currently offers the following virtual machines (runners):
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
- Windows Server 2016
- Windows Server 2019
- macOS 10.15
Qt SDK is not part of the software installed on the runners. This is not a problem since we want to build with the same Qt version that Qt Creator itself was build.
One can build a platform at a time, or multiple in parallel (matrix mode)
Prerequisites
Since GitHub is providing the virtual machines and the C++ compilers one just has to obtain Qt and Qt Creator SDKs and then just "compile".
In order to download files, to extract them, and to start compilation I decided to use a scripting language that is installed on all three of them: CMake (in scripting mode via -P command line argument).
I downloaded the Qt SDK and Qt Creator Binaries, Sources, SDK from download.qt.io.
Building the plugin
In order to configure the plugin, one just needs to run
qmake doxygen.pro CONFIG+=release QTC_SOURCE="$ENV{GITHUB_WORKSPACE}/qtcreator" QTC_BUILD="$ENV{GITHUB_WORKSPACE}/qtcreator"
Building is as easy as running make -j <number-of-cores> or jom.
At the end we will have a shared library (.dll, .so, .dynlib), which will be distributed to the users.
Triggering GitHub Actions
On git push the plugin will be built and the artifacts stored on every build. This looks like this:
If we tag a commit with git tag -a v0.4.7-qtc-4.11 -m "Release v0.4.7-qtc-4.11" and then git push origin v0.4.7-qtc-4.11 will trigger the creation of a release, and the upload of artifacts to that release. This looks like:
The newly created release looks like:
Does it run?
GitHub Actions has some differences in platforms and compilers when it comes to how Qt and Qt Creator are built:
- Visual C++ 2019 vs Visual C++ 2017
- Red Hat 7.2 vs Ubuntu 18.04
As it turns out Qt Creator was able to load the plugin on all three platforms!
Source code!
All of this was possible with a Yaml file that needs to be copied into qtcreator-doxygen/.github/workflows/build_qmake.yml
The source is below:
- qtcreator-doxygen/.github/workflow/build_qmake.yml
- Ubuntu Pastebin
- GitHub Gist
Feel free to copy and hack the script in order to release your own Qt Creator plugins! 😊
Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.8 Now!
Download the latest release here: www.qt.io/download.
Qt 6.8 release focuses on technology trends like spatial computing & XR, complex data visualization in 2D & 3D, and ARM-based development for desktop.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.