From 5ced3c66a724459da23e1dbe477b74672afbfa4e Mon Sep 17 00:00:00 2001 From: jolavillette Date: Mon, 15 Jun 2026 17:19:09 +0200 Subject: [PATCH] ci(cmake): add Windows and macOS Qt6 CMake build workflows Qt6 counterparts of windows-cmake.yml and macos-cmake.yml: build the tree against Qt6 on UCRT64 (qt6-* incl. qt6-5compat) and macOS (Homebrew 'qt'). Both keep plugins OFF since VOIP/FeedReader are not yet Qt6-ported. Completes the Qt6 CMake CI matrix (Ubuntu already green). Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/macos-cmake-qt6.yml | 89 +++++++++++++++++++ .github/workflows/windows-cmake-qt6.yml | 109 ++++++++++++++++++++++++ 2 files changed, 198 insertions(+) create mode 100644 .github/workflows/macos-cmake-qt6.yml create mode 100644 .github/workflows/windows-cmake-qt6.yml diff --git a/.github/workflows/macos-cmake-qt6.yml b/.github/workflows/macos-cmake-qt6.yml new file mode 100644 index 000000000..9d555c4d0 --- /dev/null +++ b/.github/workflows/macos-cmake-qt6.yml @@ -0,0 +1,89 @@ +# macOS CMake CI for the RetroShare monorepo built against Qt6. +# +# Qt6 counterpart of macos-cmake.yml. Same whole-tree build and Homebrew flag +# harvesting, but installs the `qt` formula (Qt6, which bundles qt5compat, svg, +# multimedia and tools) instead of qt@5, and builds with plugins OFF (VOIP still +# uses the Qt5-era QtMultimedia API; out of scope for this migration). +# +# Submodules are initialised WITHOUT --remote so libretroshare stays on its +# pinned, CMake-enabled commit. +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +name: macOS CMake C/C++ CI (Qt6) + +on: + push: + paths-ignore: + - '**/*.md' + pull_request: + paths-ignore: + - '**/*.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + name: macOS 14 / Qt6 / CMake + runs-on: macos-14 + defaults: + run: + shell: bash + + steps: + - uses: actions/checkout@v5 + with: + persist-credentials: false + + # Same pinned-commit init as the Ubuntu CMake CI (no --remote); librnp needs + # --recursive for its nested src/libsexpp. + - name: Init submodules (pinned commits) + run: | + git submodule update --init \ + libbitdht/ libretroshare/ openpgpsdk/ retroshare-webui/ + git submodule update --init --recursive \ + supportlibs/librnp + git submodule update --init \ + supportlibs/restbed supportlibs/libsam3 \ + supportlibs/udp-discovery-cpp supportlibs/rapidjson + git --no-pager -C libretroshare log --max-count 1 --oneline + + - name: Install Homebrew dependencies + run: > + brew install + ninja qt openssl@3 botan@2 sqlcipher miniupnpc + json-c asio speex speexdsp ffmpeg + libxml2 libxslt bzip2 zlib rapidjson doxygen + + # Mirrors the validated local macOS command: harvest every Homebrew opt/* + # include/lib dir into the compiler/linker flags, and additionally expose them + # to find_package() via CMAKE_PREFIX_PATH (needed for keg-only botan@2…). + - name: CMake configure + run: | + HB="$(brew --prefix)" + QT6="$(brew --prefix qt)" + IFLAGS="-I$HB/include"; for d in "$HB"/opt/*/include; do IFLAGS="$IFLAGS -I$d"; done + LFLAGS="-L$HB/lib"; for d in "$HB"/opt/*/lib; do LFLAGS="$LFLAGS -L$d"; done + # qt (Qt6) first so find_package(QT NAMES Qt6 Qt5) resolves to this config. + PREFIX="$QT6;$HB"; for d in "$HB"/opt/*; do PREFIX="$PREFIX;$d"; done + cmake -G Ninja -B Build-cmake -S . \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="$PREFIX" \ + -DQt6_DIR="$QT6/lib/cmake/Qt6" \ + -DOPENSSL_ROOT_DIR="$(brew --prefix openssl@3)" \ + -DRS_RNPLIB=ON -DRS_JSON_API=ON -DRS_WEBUI=ON \ + -DRS_GUI=ON -DRS_SERVICE=ON -DRS_FRIENDSERVER=ON -DRS_PLUGINS=OFF -DRS_FORUM_DEEP_INDEX=OFF \ + -DRS_USE_I2P_SAM3=ON -DRS_BITDHT=ON -DRS_MINIUPNPC=ON \ + -DRS_BRODCAST_DISCOVERY=ON -DRS_SQLCIPHER=ON \ + -DCMAKE_C_FLAGS="$IFLAGS" -DCMAKE_CXX_FLAGS="$IFLAGS" \ + -DCMAKE_EXE_LINKER_FLAGS="$LFLAGS" \ + -DCMAKE_SHARED_LINKER_FLAGS="$LFLAGS" \ + -DCMAKE_MODULE_LINKER_FLAGS="$LFLAGS" + + - name: CMake build + run: cmake --build Build-cmake -j$(sysctl -n hw.ncpu) diff --git a/.github/workflows/windows-cmake-qt6.yml b/.github/workflows/windows-cmake-qt6.yml new file mode 100644 index 000000000..059f32502 --- /dev/null +++ b/.github/workflows/windows-cmake-qt6.yml @@ -0,0 +1,109 @@ +# Windows (MSYS2 / UCRT64) CMake CI for the RetroShare monorepo built against Qt6. +# +# Qt6 counterpart of windows-cmake.yml. Same whole-tree build and flags, but the +# UCRT64 toolchain installs the qt6-* packages (incl. qt6-5compat for the +# Core5Compat module my version-agnostic CMake requires) and plugins are OFF +# (VOIP still uses the Qt5-era QtMultimedia API; out of scope for this migration). +# +# Submodules are initialised WITHOUT --remote so libretroshare stays on its +# pinned, CMake-enabled commit. +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +name: Windows UCRT64 CMake C/C++ CI (Qt6) + +on: + push: + paths-ignore: + - '**/*.md' + pull_request: + paths-ignore: + - '**/*.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + name: Windows UCRT64 / Qt6 / CMake + runs-on: windows-latest + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + persist-credentials: false + + - name: Setup MSYS2 (UCRT64) + uses: msys2/setup-msys2@40677d36a502eb2cf0fb808cc9dec31bf6152638 # v2.28.0 + with: + msystem: UCRT64 + update: true + install: >- + base-devel + git + perl + ruby + mingw-w64-ucrt-x86_64-toolchain + mingw-w64-ucrt-x86_64-doxygen + mingw-w64-ucrt-x86_64-cmake + mingw-w64-ucrt-x86_64-ninja + mingw-w64-ucrt-x86_64-python + mingw-w64-ucrt-x86_64-qt6-base + mingw-w64-ucrt-x86_64-qt6-multimedia + mingw-w64-ucrt-x86_64-qt6-svg + mingw-w64-ucrt-x86_64-qt6-5compat + mingw-w64-ucrt-x86_64-qt6-tools + mingw-w64-ucrt-x86_64-openssl + mingw-w64-ucrt-x86_64-libbotan + mingw-w64-ucrt-x86_64-sqlcipher + mingw-w64-ucrt-x86_64-miniupnpc + mingw-w64-ucrt-x86_64-json-c + mingw-w64-ucrt-x86_64-rapidjson + mingw-w64-ucrt-x86_64-asio + mingw-w64-ucrt-x86_64-libxml2 + mingw-w64-ucrt-x86_64-libxslt + mingw-w64-ucrt-x86_64-speex + mingw-w64-ucrt-x86_64-speexdsp + mingw-w64-ucrt-x86_64-ffmpeg + mingw-w64-ucrt-x86_64-bzip2 + mingw-w64-ucrt-x86_64-zlib + + # Same pinned-commit init as the Ubuntu/macOS CMake CI (no --remote); librnp + # needs --recursive for its nested src/libsexpp. + - name: Init submodules (pinned commits) + run: | + git submodule update --init \ + libbitdht/ libretroshare/ openpgpsdk/ retroshare-webui/ + git submodule update --init --recursive \ + supportlibs/librnp + git submodule update --init \ + supportlibs/restbed supportlibs/libsam3 \ + supportlibs/udp-discovery-cpp supportlibs/rapidjson + git --no-pager -C libretroshare log --max-count 1 --oneline + + # Mirrors windows-cmake.yml (Ninja, shared libretroshare) but with Qt6 and + # plugins OFF. + - name: CMake configure + run: > + cmake -G Ninja -B Build-cmake -S . + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + -DCMAKE_BUILD_TYPE=Release + -DRS_LIBRETROSHARE_STATIC=OFF -DRS_LIBRETROSHARE_SHARED=ON + -DRS_RNPLIB=ON -DRS_JSON_API=ON -DRS_WEBUI=ON + -DRS_GUI=ON -DRS_SERVICE=ON -DRS_FRIENDSERVER=ON + -DRS_PLUGINS=OFF -DRS_FORUM_DEEP_INDEX=OFF + -DRS_USE_I2P_SAM3=ON -DRS_BITDHT=ON -DRS_MINIUPNPC=ON + -DRS_BRODCAST_DISCOVERY=ON -DRS_SQLCIPHER=ON + -DCMAKE_C_FLAGS="-include string.h -include stdint.h" + -DCMAKE_CXX_FLAGS="-include cstring -include cstdint -Wno-template-body" + + - name: CMake build + run: cmake --build Build-cmake -j3