412 lines
12 KiB
YAML
412 lines
12 KiB
YAML
name: qt-ci
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- main
|
|
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.5.3
|
|
qt_target: desktop
|
|
compiler: ""
|
|
- name: Linux_GCC13
|
|
os: ubuntu-22.04
|
|
build_type: RelWithDebInfo
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
compiler: "gcc-13"
|
|
- name: macOS
|
|
os: macos-12
|
|
build_type: RelWithDebInfo
|
|
qt_version: 5.15.2
|
|
qt_target: desktop
|
|
deployment_target: 10.13
|
|
deployment_arch: "x86_64"
|
|
compiler: ""
|
|
- name: macOS
|
|
os: macos-12
|
|
build_type: RelWithDebInfo
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
deployment_target: 11.0
|
|
deployment_arch: "x86_64;arm64"
|
|
compiler: ""
|
|
- name: macOS_LLVM17
|
|
os: macos-13
|
|
build_type: RelWithDebInfo
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
deployment_target: 11.0
|
|
deployment_arch: "x86_64"
|
|
compiler: "llvm@17"
|
|
- name: win64_msvc2019
|
|
os: windows-2022
|
|
build_type: "RelWithDebInfo;Debug"
|
|
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;Debug"
|
|
compiler_type: x64
|
|
compiler_version: 14.29
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
qt_arch: win64_msvc2019_64
|
|
qt_tools: ""
|
|
- name: win64_mingw
|
|
os: windows-2022
|
|
build_type: RelWithDebInfo
|
|
compiler_type: mingw810_64
|
|
compiler_version: 8.10.0
|
|
qt_version: 5.15.2
|
|
qt_target: desktop
|
|
qt_arch: win64_mingw81
|
|
qt_tools: tools_mingw,qt.tools.win64_mingw810
|
|
- name: win64_mingw
|
|
os: windows-2022
|
|
build_type: RelWithDebInfo
|
|
compiler_type: mingw1120_64
|
|
compiler_version: 11.2.0
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
qt_arch: win64_mingw
|
|
qt_tools: tools_mingw90
|
|
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 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: |
|
|
brew install --overwrite python@3.11
|
|
brew install "$MLN_COMPILER"
|
|
echo "/usr/local/opt/${MLN_COMPILER}/bin" >> "$GITHUB_PATH"
|
|
{
|
|
echo "CC=/usr/local/opt/${MLN_COMPILER}/bin/clang"
|
|
echo "CXX=/usr/local/opt/${MLN_COMPILER}/bin/clang++"
|
|
echo "LDFLAGS=\"-L/usr/local/opt/${MLN_COMPILER}/lib\""
|
|
echo "CPPFLAGS=\"-I/usr/local/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@v4
|
|
|
|
- name: Download Qt
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
aqtversion: ==3.1.*
|
|
version: ${{ env.QT_VERSION }}
|
|
dir: ${{ github.workspace }}
|
|
target: ${{ matrix.qt_target }}
|
|
arch: ${{ matrix.qt_arch }}
|
|
tools: ${{ matrix.qt_tools }}
|
|
|
|
- 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_INSTALL_PREFIX="../install" \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET="${DEPLOYMENT_TARGET}" \
|
|
-DCMAKE_OSX_ARCHITECTURES="${DEPLOYMENT_ARCH}" \
|
|
-DMLN_WITH_QT=ON \
|
|
-DMLN_QT_DEPLOYMENT=ON
|
|
ninja
|
|
ninja install
|
|
|
|
- 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" \
|
|
-DCMAKE_INSTALL_PREFIX="../install" \
|
|
-DMLN_WITH_QT=ON \
|
|
-DMLN_QT_DEPLOYMENT=ON
|
|
ninja
|
|
ninja install
|
|
|
|
- name: Build maplibre-native (Linux, Qt6, custom compiler)
|
|
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_DEPLOYMENT=ON \
|
|
-DMLN_QT_WITH_INTERNAL_ICU=ON \
|
|
-DMLN_QT_WITH_INTERNAL_SQLITE=ON
|
|
ninja
|
|
|
|
- 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" \
|
|
-DCMAKE_INSTALL_PREFIX="../install" \
|
|
-DMLN_WITH_QT=ON \
|
|
-DMLN_QT_DEPLOYMENT=ON
|
|
ninja.exe
|
|
ninja.exe install
|
|
|
|
- name: Create artifacts
|
|
shell: bash
|
|
env:
|
|
QT_ARCH: ${{ matrix.name }}
|
|
QT_VERSION: ${{ matrix.qt_version }}
|
|
run: |
|
|
pushd install
|
|
tar cjvf "../maplibre-native_${QT_ARCH}_Qt${QT_VERSION}.tar.bz2" ./*
|
|
popd
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: maplibre-native_${{ matrix.name }}_Qt${{ matrix.qt_version }}
|
|
path: maplibre-native_${{ matrix.name }}_Qt${{ matrix.qt_version }}.tar.bz2
|
|
|
|
test-tarball:
|
|
needs: build
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- name: Linux
|
|
os: ubuntu-22.04
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
- name: macOS
|
|
os: macos-12
|
|
qt_version: 6.5.3
|
|
qt_target: desktop
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
QT_ARCH: ${{ matrix.name }}
|
|
QT_VERSION: ${{ matrix.qt_version }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: source
|
|
fetch-depth: 0
|
|
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: maplibre-native_${{ matrix.name }}_Qt${{ matrix.qt_version }}
|
|
|
|
- name: Download Qt
|
|
uses: jurplel/install-qt-action@v3
|
|
with:
|
|
aqtversion: ==2.1.*
|
|
version: ${{ env.QT_VERSION }}
|
|
dir: ${{ github.workspace }}
|
|
target: ${{ matrix.qt_target }}
|
|
|
|
- name: Setup Xcode
|
|
if: runner.os == 'macOS'
|
|
uses: maxim-lobanov/setup-xcode@v1
|
|
with:
|
|
xcode-version: latest-stable
|
|
|
|
- name: Build test app
|
|
run: |
|
|
mkdir install && cd install
|
|
tar xf "../maplibre-native_${QT_ARCH}_Qt${QT_VERSION}.tar.bz2"
|
|
cd ..
|
|
export CMAKE_PREFIX_PATH="$PWD/install"
|
|
mkdir build && cd build
|
|
cmake ../source/platform/qt/app/
|
|
make
|
|
|
|
release:
|
|
name: Release QMapLibreGL
|
|
if: github.ref_type == 'tag'
|
|
runs-on: ubuntu-22.04
|
|
needs: test-tarball
|
|
strategy:
|
|
max-parallel: 1
|
|
matrix:
|
|
name: [Linux, macOS, win64_msvc2019, win64_mingw]
|
|
qt_version: [5.15.2, 6.5.3]
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: maplibre-native_${{ matrix.name }}_Qt${{ matrix.qt_version }}
|
|
|
|
- name: Name tarball
|
|
env:
|
|
TAG_NAME: ${{ github.ref_name }}
|
|
TAG_PLATFORM: ${{ matrix.name }}
|
|
QT_VERSION: ${{ matrix.qt_version }}
|
|
run: |
|
|
mv "maplibre-native_${TAG_PLATFORM}_Qt${QT_VERSION}.tar.bz2" "QMapLibreGL_${TAG_NAME//qt-/}_Qt${QT_VERSION}_${TAG_PLATFORM}.tar.bz2"
|
|
|
|
- name: Release
|
|
uses: ncipollo/release-action@v1
|
|
with:
|
|
artifacts: QMapLibreGL_*.tar.bz2
|
|
allowUpdates: true
|
|
draft: true
|