mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 05:30:05 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			403 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			403 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: CI
 | |
| 
 | |
| on:
 | |
|   workflow_dispatch:
 | |
|   push:
 | |
|     branches:
 | |
|       - 'develop'
 | |
|   pull_request:
 | |
|     branches:
 | |
|       - 'develop'
 | |
| 
 | |
| concurrency:
 | |
|   # Cancel in-progress jobs for the same pull request
 | |
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | |
|   cancel-in-progress: true
 | |
| 
 | |
| jobs:
 | |
|   build:
 | |
|     strategy:
 | |
|       fail-fast: false
 | |
|       matrix:
 | |
|         include:
 | |
|           - name: windows_msvc2022_x64
 | |
|             os: windows-2022
 | |
|             build_type: Release
 | |
|             env_cc: ''
 | |
|             env_cxx: ''
 | |
|             compiler: msvc
 | |
|             cppflags: ''
 | |
|             ldflags: ''
 | |
|             msvc_arch: x64
 | |
|             msvc_version: 2022
 | |
|             qt_version: 6.8.3
 | |
|             qt_arch_aqt: win64_msvc2022_64
 | |
|             qt_arch_dir: msvc2022_64
 | |
|             qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
 | |
|             qt_tools: ''
 | |
|             conan_package_manager: ''
 | |
|             conan_profile: scwx-windows_msvc2022_x64
 | |
|             appimage_arch: ''
 | |
|             artifact_suffix: windows-x64
 | |
|           - name: linux_gcc_x64
 | |
|             os: ubuntu-22.04
 | |
|             build_type: Release
 | |
|             env_cc: gcc-11
 | |
|             env_cxx: g++-11
 | |
|             compiler: gcc
 | |
|             cppflags: ''
 | |
|             ldflags: ''
 | |
|             qt_version: 6.8.3
 | |
|             qt_arch_aqt: linux_gcc_64
 | |
|             qt_arch_dir: gcc_64
 | |
|             qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
 | |
|             qt_tools: ''
 | |
|             conan_package_manager: --conf tools.system.package_manager:mode=install --conf tools.system.package_manager:sudo=True
 | |
|             conan_profile: scwx-linux_gcc-11
 | |
|             appimage_arch: x86_64
 | |
|             artifact_suffix: linux-x64
 | |
|             compiler_packages: ''
 | |
|           - name: linux_clang_x64
 | |
|             os: ubuntu-24.04
 | |
|             build_type: Release
 | |
|             env_cc: clang-17
 | |
|             env_cxx: clang++-17
 | |
|             compiler: clang
 | |
|             cppflags: ''
 | |
|             ldflags: ''
 | |
|             qt_version: 6.8.3
 | |
|             qt_arch_aqt: linux_gcc_64
 | |
|             qt_arch_dir: gcc_64
 | |
|             qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
 | |
|             qt_tools: ''
 | |
|             conan_package_manager: --conf tools.system.package_manager:mode=install --conf tools.system.package_manager:sudo=True
 | |
|             conan_profile: scwx-linux_clang-17
 | |
|             appimage_arch: x86_64
 | |
|             artifact_suffix: linux-clang-x64
 | |
|             compiler_packages: clang-17
 | |
|           - name: linux_gcc_arm64
 | |
|             os: ubuntu-24.04-arm
 | |
|             build_type: Release
 | |
|             env_cc: gcc-11
 | |
|             env_cxx: g++-11
 | |
|             compiler: gcc
 | |
|             cppflags: ''
 | |
|             ldflags: ''
 | |
|             qt_version: 6.8.3
 | |
|             qt_arch_aqt: linux_gcc_arm64
 | |
|             qt_arch_dir: gcc_arm64
 | |
|             qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
 | |
|             qt_tools: ''
 | |
|             conan_package_manager: --conf tools.system.package_manager:mode=install --conf tools.system.package_manager:sudo=True
 | |
|             conan_profile: scwx-linux_gcc-11_armv8
 | |
|             appimage_arch: aarch64
 | |
|             artifact_suffix: linux-arm64
 | |
|             compiler_packages: g++-11
 | |
|           - name: macos_clang18_x64
 | |
|             os: macos-13
 | |
|             build_type: Release
 | |
|             env_cc: clang
 | |
|             env_cxx: clang++
 | |
|             compiler: clang
 | |
|             qt_version: 6.8.3
 | |
|             qt_arch_aqt: clang_64
 | |
|             qt_arch_dir: macos
 | |
|             qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
 | |
|             qt_tools: ''
 | |
|             conan_package_manager: ''
 | |
|             conan_profile: scwx-macos_clang-18
 | |
|             appimage_arch: ''
 | |
|             artifact_suffix: macos-x64
 | |
|           - name: macos_clang18_arm64
 | |
|             os: macos-14
 | |
|             build_type: Release
 | |
|             env_cc: clang
 | |
|             env_cxx: clang++
 | |
|             compiler: clang
 | |
|             qt_version: 6.8.3
 | |
|             qt_arch_aqt: clang_64
 | |
|             qt_arch_dir: macos
 | |
|             qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
 | |
|             qt_tools: ''
 | |
|             conan_package_manager: ''
 | |
|             conan_profile: scwx-macos_clang-18_armv8
 | |
|             appimage_arch: ''
 | |
|             artifact_suffix: macos-arm64
 | |
|     name: ${{ matrix.name }}
 | |
|     env:
 | |
|       CC: ${{ matrix.env_cc }}
 | |
|       CXX: ${{ matrix.env_cxx }}
 | |
|       SCWX_VERSION: v0.4.9
 | |
|     runs-on: ${{ matrix.os }}
 | |
| 
 | |
|     steps:
 | |
|     - name: Setup
 | |
|       run: git config --global core.longpaths true
 | |
| 
 | |
|     - name: Checkout
 | |
|       uses: actions/checkout@v4
 | |
|       with:
 | |
|         path: source
 | |
|         submodules: recursive
 | |
| 
 | |
|     - name: Install Qt
 | |
|       uses: jdpurcell/install-qt-action@v5
 | |
|       env:
 | |
|         AQT_CONFIG: ${{ github.workspace }}/source/tools/aqt-settings.ini
 | |
|       with:
 | |
|         version: ${{ matrix.qt_version }}
 | |
|         arch: ${{ matrix.qt_arch_aqt }}
 | |
|         modules: ${{ matrix.qt_modules }}
 | |
|         tools: ${{ matrix.qt_tools }}
 | |
| 
 | |
|     - name: Setup MSVC
 | |
|       if: matrix.compiler == 'msvc'
 | |
|       uses: ilammy/msvc-dev-cmd@v1
 | |
|       with:
 | |
|         arch: ${{ matrix.msvc_arch }}
 | |
|         vsversion: ${{ matrix.msvc_version }}
 | |
| 
 | |
|     - name: Setup Ubuntu Environment
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       shell: bash
 | |
|       run: |
 | |
|         sudo apt-get install doxygen \
 | |
|                              libfuse2 \
 | |
|                              ninja-build \
 | |
|                              wayland-protocols \
 | |
|                              libwayland-dev \
 | |
|                              libwayland-egl-backend-dev \
 | |
|                              flatpak \
 | |
|                              flatpak-builder \
 | |
|                              ${{ matrix.compiler_packages }}
 | |
| 
 | |
|     - name: Setup macOS Environment
 | |
|       if: ${{ startsWith(matrix.os, 'macos') }}
 | |
|       shell: bash
 | |
|       run: |
 | |
|         brew install llvm@18
 | |
|         LLVM_PATH=$(brew --prefix llvm@18)
 | |
|         echo "CC=${LLVM_PATH}/bin/clang" >> $GITHUB_ENV
 | |
|         echo "CXX=${LLVM_PATH}/bin/clang++" >> $GITHUB_ENV
 | |
|         echo "CPPFLAGS=-I${LLVM_PATH}/include" >> $GITHUB_ENV
 | |
|         echo "LDFLAGS=-L${LLVM_PATH}/lib -L${LLVM_PATH}/lib/c++" >> $GITHUB_ENV
 | |
| 
 | |
|     - name: Setup Python Environment
 | |
|       shell: pwsh
 | |
|       run: |
 | |
|         pip install geopandas `
 | |
|                     GitPython `
 | |
|                     conan
 | |
| 
 | |
|     - name: Cache Conan Packages
 | |
|       uses: actions/cache@v4
 | |
|       with:
 | |
|         path: ~/.conan2
 | |
|         key: build-${{ matrix.conan_profile }}-${{ hashFiles('./source/conanfile.py', './source/tools/conan/profiles/*') }}
 | |
| 
 | |
|     - name: Install Conan Packages
 | |
|       shell: pwsh
 | |
|       run: |
 | |
|         conan config install `
 | |
|           ./source/tools/conan/profiles/${{ matrix.conan_profile }} `
 | |
|           -tf profiles
 | |
|         mkdir build
 | |
|         cd build
 | |
|         mkdir conan
 | |
|         conan install ../source/ `
 | |
|           --remote conancenter `
 | |
|           --build missing `
 | |
|           --profile:all ${{ matrix.conan_profile }} `
 | |
|           --settings:all build_type=${{ matrix.build_type }} `
 | |
|           --output-folder ./conan/ `
 | |
|           ${{ matrix.conan_package_manager }}
 | |
| 
 | |
|     - name: Build Supercell Wx
 | |
|       shell: pwsh
 | |
|       run: |
 | |
|         cd build
 | |
|         cmake ../source/ `
 | |
|           -G Ninja `
 | |
|           -DCMAKE_BUILD_TYPE="${{ matrix.build_type }}" `
 | |
|           -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="${{ github.workspace }}/source/external/cmake-conan/conan_provider.cmake" `
 | |
|           -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/supercell-wx" `
 | |
|           -DCONAN_HOST_PROFILE="${{ matrix.conan_profile }}" `
 | |
|           -DCONAN_BUILD_PROFILE="${{ matrix.conan_profile }}"
 | |
|         ninja supercell-wx wxtest
 | |
| 
 | |
|     - name: Separate Debug Symbols (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       shell: bash
 | |
|       run: |
 | |
|         cd build/
 | |
|         cd Release/
 | |
|         cd bin/
 | |
|         objcopy --only-keep-debug supercell-wx supercell-wx.debug
 | |
|         objcopy --strip-debug --strip-unneeded supercell-wx
 | |
|         cd ..
 | |
|         cd lib/
 | |
|         objcopy --only-keep-debug libQMapLibre.so libQMapLibre.so.debug
 | |
|         objcopy --strip-debug --strip-unneeded libQMapLibre.so
 | |
| 
 | |
|     - name: Install Supercell Wx
 | |
|       shell: pwsh
 | |
|       run: |
 | |
|         cd build
 | |
|         cmake --install . --component supercell-wx
 | |
| 
 | |
|     - name: Collect Artifacts
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       shell: bash
 | |
|       run: |
 | |
|         pushd supercell-wx/
 | |
|         cd lib/
 | |
|         ln -s libssl.so.3 libssl.so
 | |
|         rm -f libGLX.so*
 | |
|         rm -f libOpenGL.so*
 | |
|         cd ..
 | |
|         mkdir -p plugins/
 | |
|         cd plugins/
 | |
|         mkdir -p sqldrivers/
 | |
|         cp "${RUNNER_WORKSPACE}/Qt/${{ matrix.qt_version }}/${{ matrix.qt_arch_dir }}/plugins/sqldrivers/libqsqlite.so" sqldrivers/
 | |
|         mkdir -p platforms/
 | |
|         cp ${RUNNER_WORKSPACE}/Qt/${{ matrix.qt_version }}/${{ matrix.qt_arch_dir }}/plugins/platforms/libqwayland* platforms/
 | |
|         cd ..
 | |
|         popd
 | |
|         tar -czf supercell-wx-${{ matrix.artifact_suffix }}.tar.gz supercell-wx/
 | |
| 
 | |
|     - name: Upload Artifacts (Windows)
 | |
|       if: matrix.os == 'windows-2022'
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/supercell-wx/
 | |
| 
 | |
|     - name: Upload Debug Artifacts (Windows)
 | |
|       if: matrix.os == 'windows-2022'
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-debug-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/build/Release/bin/*.pdb
 | |
| 
 | |
|     - name: Upload Artifacts (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/supercell-wx-${{ matrix.artifact_suffix }}.tar.gz
 | |
| 
 | |
|     - name: Upload Debug Artifacts (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-debug-${{ matrix.artifact_suffix }}
 | |
|         path: |
 | |
|           ${{ github.workspace }}/build/Release/bin/*.debug
 | |
|           ${{ github.workspace }}/build/Release/lib/*.debug
 | |
| 
 | |
|     - name: Build Installer (Windows)
 | |
|       if: matrix.os == 'windows-2022'
 | |
|       shell: pwsh
 | |
|       run: |
 | |
|         cd build
 | |
|         cpack
 | |
| 
 | |
|     - name: Upload Installer (Windows)
 | |
|       if: matrix.os == 'windows-2022'
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-installer-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/build/supercell-wx-*.msi*
 | |
| 
 | |
|     - name: Build AppImage (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       env:
 | |
|         INSTALL_DIR: ${{ github.workspace }}/supercell-wx/
 | |
|         APPIMAGE_DIR: ${{ github.workspace }}/supercell-wx-appimage/
 | |
|         LDAI_UPDATE_INFORMATION: gh-releases-zsync|dpaulat|supercell-wx|latest|*${{ matrix.appimage_arch }}.AppImage.zsync
 | |
|         LDAI_OUTPUT: supercell-wx-${{ env.SCWX_VERSION }}-${{ matrix.appimage_arch }}.AppImage
 | |
|         LINUXDEPLOY_OUTPUT_APP_NAME: supercell-wx
 | |
|         LINUXDEPLOY_OUTPUT_VERSION: ${{ env.SCWX_VERSION }}
 | |
|       shell: bash
 | |
|       run: |
 | |
|         wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-${{ matrix.appimage_arch }}.AppImage
 | |
|         chmod +x linuxdeploy-${{ matrix.appimage_arch }}.AppImage
 | |
|         cp "${{ github.workspace }}/source/scwx-qt/res/icons/scwx-256.png" supercell-wx.png
 | |
|         cp "${{ github.workspace }}/source/scwx-qt/res/linux/supercell-wx.desktop" .
 | |
|         cp -r "${{ env.INSTALL_DIR }}" "${{ env.APPIMAGE_DIR }}"
 | |
|         pushd "${{ env.APPIMAGE_DIR }}"
 | |
|         mkdir -p usr/
 | |
|         mv bin/ usr/
 | |
|         mv lib/ usr/
 | |
|         mv plugins/ usr/
 | |
|         popd
 | |
|         ./linuxdeploy-${{ matrix.appimage_arch }}.AppImage --appdir ${{ env.APPIMAGE_DIR }} -i supercell-wx.png -d supercell-wx.desktop
 | |
|         ./linuxdeploy-${{ matrix.appimage_arch }}.AppImage --appdir ${{ env.APPIMAGE_DIR }} --output appimage
 | |
|         rm -f linuxdeploy-${{ matrix.appimage_arch }}.AppImage
 | |
| 
 | |
|     - name: Upload AppImage (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-appimage-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/*-${{ matrix.appimage_arch }}.AppImage*
 | |
| 
 | |
|     - name: Build FlatPak (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       env:
 | |
|         INSTALL_DIR: ${{ github.workspace }}/supercell-wx/
 | |
|         FLATPAK_DIR: ${{ github.workspace }}/supercell-wx-flatpak/
 | |
|       shell: bash
 | |
|       run: |
 | |
|         cp -r ${{ env.INSTALL_DIR }} ${{ env.FLATPAK_DIR }}
 | |
|         # Copy krb5 libraries to flatpak
 | |
|         cp /usr/lib/*/libkrb5.so* \
 | |
|            /usr/lib/*/libkrb5support.so* \
 | |
|            /usr/lib/*/libgssapi_krb5.so* \
 | |
|            /usr/lib/*/libk5crypto.so* \
 | |
|            /usr/lib/*/libkeyutils.so* \
 | |
|            ${{ env.FLATPAK_DIR }}/lib
 | |
| 
 | |
|         flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
 | |
|         flatpak-builder --force-clean \
 | |
|             --user \
 | |
|             --install-deps-from=flathub \
 | |
|             --repo=flatpak-repo \
 | |
|             --install flatpak-build \
 | |
|             ${{ github.workspace }}/source/tools/net.supercellwx.app.yml
 | |
|         flatpak build-bundle flatpak-repo supercell-wx.flatpak net.supercellwx.app
 | |
| 
 | |
|     - name: Upload FlatPak (Linux)
 | |
|       if: ${{ startsWith(matrix.os, 'ubuntu') }}
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-flatpak-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/supercell-wx.flatpak
 | |
| 
 | |
|     - name: Build Disk Image (macOS)
 | |
|       if: ${{ startsWith(matrix.os, 'macos') }}
 | |
|       shell: pwsh
 | |
|       run: |
 | |
|         cd build
 | |
|         cpack
 | |
| 
 | |
|     - name: Upload Disk Image (macOS)
 | |
|       if: ${{ startsWith(matrix.os, 'macos') }}
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-${{ matrix.artifact_suffix }}
 | |
|         path: ${{ github.workspace }}/build/supercell-wx-*.dmg*
 | |
| 
 | |
|     - name: Test Supercell Wx
 | |
|       working-directory: ${{ github.workspace }}/build
 | |
|       env:
 | |
|         MAPBOX_API_KEY:   ${{ secrets.MAPBOX_API_KEY }}
 | |
|         MAPTILER_API_KEY: ${{ secrets.MAPTILER_API_KEY }}
 | |
|       run: ctest -C ${{ matrix.build_type }} --exclude-regex "test_mln.*|UpdateManager.*"
 | |
| 
 | |
|     - name: Upload Test Logs
 | |
|       if: ${{ !cancelled() }}
 | |
|       uses: actions/upload-artifact@v4
 | |
|       with:
 | |
|         name: supercell-wx-test-logs-${{ matrix.name }}
 | |
|         path: ${{ github.workspace }}/build/Testing/
 | 
