From bcdf004b8a7c338ef67b6679beeec69343c4074e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:22:44 +0100 Subject: [PATCH 01/25] Update CI to Qt 6.12.0 and Emscripten 5.0.5 Emscripten 5.0.5 is the version the Qt 6.12.0 WebAssembly binaries are built with, which Qt requires applications to match. --- .github/workflows/codeql.yml | 2 +- .github/workflows/main.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index d5216c1..c96b245 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -18,7 +18,7 @@ on: branches: [ "master" ] env: - QT_VERSION: '6.10.2' + QT_VERSION: '6.12.0' QT_MODULES: 'qtmultimedia qtwebsockets qtimageformats' jobs: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 766955a..3afbacd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,9 +10,9 @@ on: create: env: - QT_VERSION: '6.10.2' + QT_VERSION: '6.12.0' QT_MODULES: 'qtmultimedia qtwebsockets qtimageformats' - EM_VERSION: '4.0.7' + EM_VERSION: '5.0.5' permissions: contents: write From 8f74ec7c82db386f881207594b603fad37142dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:22:53 +0100 Subject: [PATCH 02/25] Raise the macOS deployment target to 14.4 Qt 6.12 supports macOS 14.4 and newer. With a deployment target of 13.0 the app claimed to run on macOS 13, where it would fail to start against the Qt 6.12 frameworks. --- dist/macos/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/macos/build.sh b/dist/macos/build.sh index adfd7d3..d3ca601 100755 --- a/dist/macos/build.sh +++ b/dist/macos/build.sh @@ -5,5 +5,5 @@ set -e mkdir build_macos cd build_macos export CMAKE_PREFIX_PATH=$QT_ROOT_DIR/lib/cmake -cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET="13.0" -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_BUILD_TYPE=Release -DIMGUR_API_KEY=$IMGUR_API_KEY -DLITH_VERSION=$VERSION_NAME -DCMAKE_INSTALL_PREFIX=installed +cmake .. -DCMAKE_OSX_DEPLOYMENT_TARGET="14.4" -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_BUILD_TYPE=Release -DIMGUR_API_KEY=$IMGUR_API_KEY -DLITH_VERSION=$VERSION_NAME -DCMAKE_INSTALL_PREFIX=installed cmake --build . --parallel From 73b1454838909dd1828b83990e4d7347d92d8e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:23:12 +0100 Subject: [PATCH 03/25] Build Android with the NDK Qt 6.12 is built with The Android job used the newest NDK installed on the runner, while Qt recommends building apps with the same NDK as the Qt for Android libraries (r27c for Qt 6.12) to avoid missing symbol errors. That NDK version is now installed explicitly and used for the build. --- .github/workflows/main.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3afbacd..5fe8e34 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,6 +13,8 @@ env: QT_VERSION: '6.12.0' QT_MODULES: 'qtmultimedia qtwebsockets qtimageformats' EM_VERSION: '5.0.5' + # Has to match the NDK the Qt for Android binaries are built with + ANDROID_NDK_VERSION: '27.2.12479018' permissions: contents: write @@ -150,14 +152,17 @@ jobs: - name: Get OpenSSL run: | git clone https://github.com/KDAB/android_openssl.git --depth=1 + - name: Install the Android NDK + run: | + yes | "${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager" --install "ndk;${ANDROID_NDK_VERSION}" > /dev/null - name: Build the Android binary run: | export ANDROID_SDK=${ANDROID_SDK_ROOT} export CPM_SOURCE_CACHE=~/cpm-cache export ANDROID_OPENSSL_PATH="$PWD/android_openssl/ssl_3" - export ANDROID_NDK="${ANDROID_NDK_LATEST_HOME}" - export ANDROID_NDK_HOME="${ANDROID_NDK_LATEST_HOME}" - export ANDROID_NDK_ROOT="${ANDROID_NDK_LATEST_HOME}" + export ANDROID_NDK="${ANDROID_SDK_ROOT}/ndk/${ANDROID_NDK_VERSION}" + export ANDROID_NDK_HOME="${ANDROID_NDK}" + export ANDROID_NDK_ROOT="${ANDROID_NDK}" IMGUR_API_KEY=${{ secrets.IMGUR_API_KEY }} bash ./dist/android/build.sh - name: Upload artifacts to GitHub if: github.event_name != 'create' From d9a9370bf88480d5bff85958f33b4e53ad8b89d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:23:25 +0100 Subject: [PATCH 04/25] Build Android with JDK 21 Qt 6.12 for Android is tested with JDK 21 together with Gradle 9.5.1 and AGP 9.2.1, while the Ubuntu runners default to JDK 17. --- .github/workflows/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5fe8e34..46d912d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -155,6 +155,11 @@ jobs: - name: Install the Android NDK run: | yes | "${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager" --install "ndk;${ANDROID_NDK_VERSION}" > /dev/null + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '21' - name: Build the Android binary run: | export ANDROID_SDK=${ANDROID_SDK_ROOT} From 9f575627dd83d74dc8b325aac9e739dd6d96152e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:23:33 +0100 Subject: [PATCH 05/25] Install Qt for Android from the all_os packages Since Qt 6.7 the Android binaries are published under the all_os host, which install-qt-action selects by default for Android, the same as for the WebAssembly job. Forcing the linux host for the Android Qt was a leftover from older Qt versions. --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 46d912d..f83c81f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -142,7 +142,6 @@ jobs: uses: jurplel/install-qt-action@v4 with: version: ${{env.QT_VERSION}} - host: linux target: android arch: android_armv7 modules: ${{env.QT_MODULES}} From 0074b7a0cf4b43505320c11068d9880be6ccf97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:23:46 +0100 Subject: [PATCH 06/25] Build the Android APK for arm64-v8a too Only the armeabi-v7a Qt was installed, so QT_ANDROID_BUILD_ALL_ABIS produced a 32-bit only APK, which doesn't run natively on 64-bit only devices and isn't accepted by Google Play. The arm64-v8a Qt is now installed next to it, so the APK contains both ABIs. --- .github/workflows/main.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f83c81f..06c911a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -138,6 +138,16 @@ jobs: modules: ${{env.QT_MODULES}} cache: true cache-key-prefix: ${{ github.job }}-qt-${{ env.QT_VERSION }} + - name: Install Qt for arm64-v8a + uses: jurplel/install-qt-action@v4 + with: + version: ${{env.QT_VERSION}} + target: android + arch: android_arm64_v8a + set-env: false + modules: ${{env.QT_MODULES}} + cache: true + cache-key-prefix: ${{ github.job }}-qt-cross-arm64-${{ env.QT_VERSION }} - name: Install Qt uses: jurplel/install-qt-action@v4 with: From eb8d8f1b7738c9a90084e065456ff303021b4940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C5=99=C3=ADza?= Date: Sat, 31 Oct 2026 15:24:22 +0100 Subject: [PATCH 07/25] Use the installed WebAssembly Qt path instead of guessing it The WebAssembly job rewrote QT_ROOT_DIR to a sibling "wasm_multithread" directory to work around install-qt-action pointing it elsewhere. install-qt-action now sets QT_ROOT_DIR to the actual install prefix and exposes it as the qt-root-dir step output, which the build now uses directly. --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 06c911a..d678d6b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -217,6 +217,7 @@ jobs: cache-key-prefix: ${{ github.job }}-qt-${{ env.QT_VERSION }} - name: Install Qt + id: install-qt-wasm uses: jurplel/install-qt-action@v4 with: version: ${{env.QT_VERSION}} @@ -234,8 +235,7 @@ jobs: - name: Build the Emscripten binary run: | - #hack - export QT_ROOT_DIR=${QT_ROOT_DIR}/../wasm_multithread + export QT_ROOT_DIR="${{ steps.install-qt-wasm.outputs.qt-root-dir }}" IMGUR_API_KEY=${{ secrets.IMGUR_API_KEY }} bash ./dist/wasm/build.sh # inject CORS handling into the main page sed s'/\(<\/title>\)/\0\n