name: qt-ci on: workflow_dispatch: push: branches: - main - qt-*.*.x tags: - "qt-**" paths: - CMakeLists.txt - ".github/actions/qt5-build/**" - ".github/actions/qt6-build/**" - ".github/workflows/qt-ci.yml" - "bin/**" - "expression-test/**" - "include/**" - "metrics/**" - "platform/default/**" - "platform/qt/**" - "render-test/**" - "scripts/**" - "src/**" - "test/**" - "vendor/**" - ".gitmodules" - "!**/*.md" pull_request: branches: - "*" paths: - CMakeLists.txt - ".github/actions/qt5-build/**" - ".github/actions/qt6-build/**" - ".github/workflows/qt-ci.yml" - "bin/**" - "expression-test/**" - "include/**" - "metrics/**" - "platform/default/**" - "platform/qt/**" - "render-test/**" - "scripts/**" - "src/**" - "test/**" - "vendor/**" - ".gitmodules" - "!**/*.md" concurrency: # cancel jobs on PRs only group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} jobs: build: strategy: matrix: include: - name: Linux_GCC14 os: ubuntu-24.04 build_type: RelWithDebInfo qt_version: 6.9.1 qt_target: desktop compiler: "gcc-14" - name: macOS os: macos-14 build_type: RelWithDebInfo qt_version: 6.9.1 qt_target: desktop deployment_target: 12.0 deployment_arch: "x86_64;arm64" compiler: "" # disabled due to https://github.com/llvm/llvm-project/issues/77653 # https://github.com/maplibre/maplibre-native/pull/3879#issuecomment-3406495279 # - name: macOS_LLVM # os: macos-14 # build_type: RelWithDebInfo # qt_version: 6.9.1 # qt_target: desktop # deployment_target: 12.0 # deployment_arch: "arm64" # compiler: "llvm" - name: win64_msvc2022 os: windows-2022 build_type: "RelWithDebInfo" compiler_type: x64 qt_version: 6.9.1 qt_target: desktop qt_arch: win64_msvc2022_64 qt_tools: "" runs-on: ${{ matrix.os }} env: BUILD_TYPE: ${{ matrix.build_type }} COMPILER_TYPE: ${{ matrix.compiler_type }} DEPLOYMENT_TARGET: ${{ matrix.deployment_target }} DEPLOYMENT_ARCH: ${{ matrix.deployment_arch }} QT_VERSION: ${{ matrix.qt_version }} steps: - if: runner.os == 'Windows' run: git config --global core.longpaths true - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: path: source submodules: recursive persist-credentials: false - name: Install test dependencies if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install \ libxkbcommon-x11-0 \ libxcb-cursor0 \ libxcb-icccm4 \ libxcb-image0 \ libxcb-keysyms1 \ libxcb-randr0 \ libxcb-render-util0 \ libxcb-xinerama0 \ libxcb-xfixes0 \ libegl1 \ fonts-noto-cjk - name: Install compiler (Linux) id: install_compiler if: runner.os == 'Linux' uses: rlalik/setup-cpp-compiler@3dbf473b4e7d87af3e7f329ca64bca40b2bae127 # v2 with: compiler: ${{ matrix.compiler }} - name: Setup compiler (Linux) if: runner.os == 'Linux' env: CC: ${{ steps.install_compiler.outputs.cc }} CXX: ${{ steps.install_compiler.outputs.cxx }} run: | { echo "CC=$CC" echo "CXX=$CXX" } >> "$GITHUB_ENV" - name: Setup compiler (macOS) if: runner.os == 'macOS' && matrix.compiler != '' env: MLN_COMPILER: ${{ matrix.compiler }} run: | # https://github.com/actions/runner-images/issues/8838#issuecomment-1817486924 brew link --overwrite python@3.12 brew install "$MLN_COMPILER" echo "/opt/homebrew/opt/${MLN_COMPILER}/bin" >> "$GITHUB_PATH" { echo "CC=/opt/homebrew/opt/${MLN_COMPILER}/bin/clang" echo "CXX=/opt/homebrew/opt/${MLN_COMPILER}/bin/clang++" echo "LDFLAGS=\"-L/opt/homebrew/opt/${MLN_COMPILER}/lib\"" echo "CPPFLAGS=\"-I/opt/homebrew/opt/${MLN_COMPILER}/include\"" } >> "$GITHUB_ENV" - name: Setup Xcode if: runner.os == 'macOS' uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: xcode-version: latest-stable - name: Setup MSVC if: matrix.qt_arch == 'win64_msvc2022_64' uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 with: arch: ${{ matrix.compiler_type }} - name: Setup ninja uses: seanmiddleditch/gha-setup-ninja@3b1f8f94a2f8254bd26914c4ab9474d4f0015f67 # v6 - name: Download Qt uses: jurplel/install-qt-action@48d3ad6db93f3627c8ee7a0454bc6f3744f7e730 # v4.3.1 with: aqtversion: ==3.1.* version: ${{ env.QT_VERSION }} dir: ${{ github.workspace }} target: ${{ matrix.qt_target }} arch: ${{ matrix.qt_arch }} tools: ${{ matrix.qt_tools }} extra: --base https://mirrors.ocf.berkeley.edu/qt/ - name: Set up ccache uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23 with: key: Qt_${{ matrix.name }}_${{ matrix.qt_version }} max-size: 200M - name: Print cmake version run: | cmake --version which cmake - name: Build maplibre-native (macOS) if: runner.os == 'macOS' && matrix.qt_target == 'desktop' run: | mkdir build && cd build cmake ../source/ \ -G Ninja \ -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ -DCMAKE_C_COMPILER_LAUNCHER="ccache" \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ -DCMAKE_OSX_DEPLOYMENT_TARGET="${DEPLOYMENT_TARGET}" \ -DCMAKE_OSX_ARCHITECTURES="${DEPLOYMENT_ARCH}" \ -DMLN_WITH_QT=ON \ -DMLN_WITH_OPENGL=ON ninja - name: Build maplibre-native (Linux, Qt6) if: runner.os == 'Linux' run: | mkdir build && cd build qt-cmake ../source/ \ -G Ninja \ -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ -DCMAKE_C_COMPILER_LAUNCHER="ccache" \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ -DMLN_WITH_QT=ON \ -DMLN_WITH_OPENGL=ON ninja - name: Build maplibre-native (Linux, Qt6, internal libraries) if: runner.os == 'Linux' run: | mkdir build-internal && cd build-internal qt-cmake ../source/ \ -G Ninja \ -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ -DCMAKE_C_COMPILER_LAUNCHER="ccache" \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ -DMLN_WITH_QT=ON \ -DMLN_QT_WITH_INTERNAL_ICU=ON \ -DMLN_QT_WITH_INTERNAL_SQLITE=ON \ -DMLN_WITH_OPENGL=ON ninja - name: Run tests (Linux) if: runner.os == 'Linux' uses: coactions/setup-xvfb@b6b4fcfb9f5a895edadc3bc76318fae0ac17c8b3 # v1.0.1 with: run: ctest --output-on-failure working-directory: build - name: Build maplibre-native (Windows) if: runner.os == 'Windows' shell: bash run: | export PATH="$IQTA_TOOLS/$COMPILER_TYPE/bin:$PATH" echo "$PATH" mkdir build && cd build cmake.exe ../source/ \ -G"Ninja Multi-Config" \ -DCMAKE_CONFIGURATION_TYPES="${BUILD_TYPE}" \ -DCMAKE_C_COMPILER_LAUNCHER="ccache.exe" \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache.exe" \ -DMLN_WITH_QT=ON \ -DMLN_WITH_OPENGL=ON ninja.exe