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 os: ubuntu-22.04 build_type: RelWithDebInfo qt_version: 5.15.2 qt_target: desktop compiler: "" - name: Linux os: ubuntu-22.04 build_type: RelWithDebInfo qt_version: 6.7.0 qt_target: desktop compiler: "" - name: Linux_GCC13 os: ubuntu-24.04 build_type: RelWithDebInfo qt_version: 6.7.0 qt_target: desktop compiler: "gcc-13" - name: macOS os: macos-13 build_type: RelWithDebInfo qt_version: 5.15.2 qt_target: desktop deployment_target: 10.15 deployment_arch: "x86_64" compiler: "" - name: macOS os: macos-14 build_type: RelWithDebInfo qt_version: 6.7.0 qt_target: desktop deployment_target: 11.0 deployment_arch: "x86_64;arm64" compiler: "" - name: macOS_LLVM18 os: macos-14 build_type: RelWithDebInfo qt_version: 6.7.0 qt_target: desktop deployment_target: 11.0 deployment_arch: "arm64" compiler: "llvm" - name: win64_msvc2019 os: windows-2022 build_type: "RelWithDebInfo" compiler_type: x64 compiler_version: 14.29 qt_version: 5.15.2 qt_target: desktop qt_arch: win64_msvc2019_64 qt_tools: "" - name: win64_msvc2019 os: windows-2022 build_type: "RelWithDebInfo" compiler_type: x64 compiler_version: 14.29 qt_version: 6.7.0 qt_target: desktop qt_arch: win64_msvc2019_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: - name: Checkout uses: actions/checkout@v4 with: path: source fetch-depth: 0 - name: Setup submodules shell: bash run: | cd source auth_header="$(git config --local --get http.https://github.com/.extraheader)" git submodule sync --recursive git -c core.longpaths=true -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 || true - name: Install test dependencies if: runner.os == 'Linux' && matrix.compiler != '' 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 id: install_compiler if: runner.os == 'Linux' && matrix.compiler != '' uses: rlalik/setup-cpp-compiler@master with: compiler: ${{ matrix.compiler }} - name: Setup compiler (Linux) if: runner.os == 'Linux' && matrix.compiler != '' 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@v1 with: xcode-version: latest-stable - name: Setup MSVC if: matrix.qt_arch == 'win64_msvc2019_64' uses: ilammy/msvc-dev-cmd@v1 with: arch: ${{ matrix.compiler_type }} toolset: ${{ matrix.compiler_version }} - name: Setup ninja uses: seanmiddleditch/gha-setup-ninja@v5 - name: Download Qt uses: jurplel/install-qt-action@v4 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: Update ccache if: runner.os == 'Windows' shell: bash run: | # version is pinned due to issues with caching MSVC in 4.8 choco.exe install ccache --version=4.7.5 --no-progress ccache.exe --version echo "CCACHE_CONFIGPATH=C:/Users/runneradmin/AppData/Roaming/ccache/ccache.conf" >> "$GITHUB_ENV" - name: Set up ccache uses: hendrikmuhs/ccache-action@v1 with: key: Qt_${{ matrix.name }}_${{ matrix.qt_version }} max-size: 200M - 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 ninja - name: Build maplibre-native (Linux, Qt5) if: runner.os == 'Linux' && matrix.qt_version == '5.15.2' uses: ./source/.github/actions/qt5-build - name: Build maplibre-native (Linux, Qt6) if: runner.os == 'Linux' && matrix.qt_version != '5.15.2' && matrix.compiler == '' uses: ./source/.github/actions/qt6-build - name: Build maplibre-native (Linux, Qt6, custom compiler) if: runner.os == 'Linux' && matrix.qt_version != '5.15.2' && matrix.compiler != '' 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 ninja - name: Build maplibre-native (Linux, Qt6, custom compiler, internal libraries) if: runner.os == 'Linux' && matrix.qt_version != '5.15.2' && matrix.compiler != '' 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 ninja - name: Run tests (Linux) if: runner.os == 'Linux' && matrix.qt_version != '5.15.2' && matrix.compiler != '' uses: coactions/setup-xvfb@v1 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 ninja.exe