| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- ---
- name: 🎁 Package with vcpkg
- on:
- push:
- branches:
- - master
- - release-**
- pull_request:
- release:
- types: ['published', 'released']
- jobs:
- build:
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- include:
- - triplet: 'x64-windows'
- os: 'windows-2019'
- - triplet: 'x64-linux'
- os: 'ubuntu-20.04'
- - triplet: 'x64-osx'
- os: 'macos-10.15'
- steps:
- # Avoid that we run out of disk space
- # - name: Free additional space
- # uses: easimon/maximize-build-space@master
- # if: ${{ matrix.triplet == 'x64-linux' }}
- # with:
- # remove-haskell: true # 9G
- # remove-android: true # 18G
- # remove-dotnet: true # 30G
- - name: 🐣 Checkout
- uses: actions/checkout@v2
- with:
- submodules: recursive
- - name: 🌾 Prepare vars
- id: vars
- shell: bash
- run: |
- ./scripts/ci/env_gh.sh
- case ${{ matrix.triplet }} in
- x64-windows)
- BUILD_ROOT="C:"
- echo "::set-output name=MONO::"
- echo "::set-output name=PATHCONVERT::cygpath -u"
- echo "::set-output name=EXCLUDE_TESTS::(smoke_test)"
- ;;
- x64-linux)
- BUILD_ROOT="/home/runner"
- echo "::set-output name=MONO::mono"
- echo "::set-output name=OVERLAY::vcpkg/overlay_system_qt"
- echo "::set-output name=PATHCONVERT::echo"
- echo "::set-output name=INSTALL_QT::true"
- echo "::set-output name=QT_TARGET::desktop"
- echo "::set-output name=QT_ARCH::"
- ;;
- x64-osx)
- BUILD_ROOT="/Users/runner"
- echo "::set-output name=MONO::mono"
- echo "::set-output name=OVERLAY::vcpkg/overlay_system_qt"
- echo "::set-output name=PATHCONVERT::echo"
- echo "::set-output name=INSTALL_QT::true"
- echo "::set-output name=QT_TARGET::desktop"
- echo "::set-output name=QT_ARCH::"
- ;;
- esac
- echo "::set-output name=VCPKG_ROOT::${BUILD_ROOT}/src"
- echo "::set-output name=BUILD_TYPE::Release"
- echo "::set-output name=BUILD_ROOT::${BUILD_ROOT}"
- echo "VCPKG_ROOT=${BUILD_ROOT}/src" >> $GITHUB_ENV
- echo "CMAKE_BUILD_DIR=${BUILD_ROOT}/builddir" >> $GITHUB_ENV
- echo "VCPKG_DEFAULT_BINARY_CACHE=${BUILD_ROOT}/vcpkg_cache" >> $GITHUB_ENV
- - name: 🐩 Install CMake and Ninja
- uses: lukka/get-cmake@latest
- - name: 📪 Clone vcpkg
- shell: bash
- run: |
- VCPKG_SHA=$(head -1 .git/modules/vcpkg/HEAD)
- mkdir -p "${{ env.VCPKG_DEFAULT_BINARY_CACHE }}"
- mkdir -p "${{ steps.vars.outputs.VCPKG_ROOT }}"
- cd "${{ steps.vars.outputs.VCPKG_ROOT }}"
- git init
- git remote add origin https://github.com/microsoft/vcpkg.git
- git fetch --depth 1 origin $VCPKG_SHA
- git checkout FETCH_HEAD
- - name: 📫 Cache vcpkg
- id: cache-vcpkg-tool
- uses: pat-s/always-upload-cache@v2.1.5
- with:
- path: |
- ${{ steps.vars.outputs.VCPKG_ROOT }}/vcpkg
- ${{ steps.vars.outputs.VCPKG_ROOT }}/vcpkg.exe
- key: ${{ runner.os }}-${{ hashFiles('.git/modules/vcpkg/HEAD') }}-x
- - name: 📬 Bootstrap vcpkg
- if: steps.cache-vcpkg-tool.outputs.cache-hit != 'true'
- shell: bash
- working-directory: ${{ steps.vars.outputs.VCPKG_ROOT }}
- run: |
- if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null ; then
- ./bootstrap-vcpkg.bat
- else
- ./bootstrap-vcpkg.sh
- fi
- - name: 🔐 Setup NuGet Credentials
- shell: bash
- run: |
- ${{ steps.vars.outputs.VCPKG_ROOT }}/vcpkg fetch nuget
- ${{ steps.vars.outputs.MONO }} $(${{ steps.vars.outputs.VCPKG_ROOT }}/vcpkg fetch nuget | tail -n 1) \
- sources add \
- -source "https://nuget.pkg.github.com/opengisch/index.json" \
- -storepasswordincleartext \
- -name "GitHub" \
- -username "opengisch" \
- -password "${{ secrets.GITHUB_TOKEN }}"
- ${{ steps.vars.outputs.MONO }} $(${{ steps.vars.outputs.VCPKG_ROOT }}/vcpkg fetch nuget | tail -n 1) \
- setapikey ${{ secrets.GITHUB_TOKEN }} -src "https://nuget.pkg.github.com/opengisch/index.json"
- - name: 🧽 Developer Command Prompt for Microsoft Visual C++
- uses: ilammy/msvc-dev-cmd@v1
- if: ${{ matrix.os == 'windows-2019' }}
- - name: 🔥 Free additional space
- if: ${{ matrix.triplet == 'x64-linux' }}
- run: |
- df -h
- sudo rm -rf /usr/share/dotnet/sdk
- sudo rm -rf /usr/share/rust
- sudo rm -rf /usr/share/swift
- sudo rm -rf /usr/local/lib/android
- sudo apt remove llvm-* ghc-* google-chrome-* dotnet-sdk-* azure-cli google-cloud-sdk google-chrome-stable firefox
- dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -n 100
- du -a /usr/share | sort -n -r | head -n 10
- du -a /usr/local/share | sort -n -r | head -n 10
- df -h
- sudo apt clean
- df -h
- - name: 💐 Install Qt
- if: ${{ steps.vars.outputs.INSTALL_QT }}
- uses: jurplel/install-qt-action@v2
- with:
- version: 5.15.2
- modules: 'qtcharts'
- target: ${{ steps.vars.outputs.QT_TARGET }}
- arch: ${{ steps.vars.outputs.QT_ARCH }}
- - name: 🐧 Prepare linux build env
- if: ${{ matrix.triplet == 'x64-linux' }}
- run: |
- sudo apt-get update
- sudo apt-get install -y gperf autopoint '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
- sudo apt-get remove -y libopenexr-dev # Avoid gdal picking this system lib up
- # Required to run unit tests on linux
- echo "QT_QPA_PLATFORM=offscreen" >> $GITHUB_ENV
- echo "TESTWRAPPER=xvfb-run" >> $GITHUB_ENV
- echo "EXTRA_CMAKE_ARGS=-GNinja -DCMAKE_INSTALL_PREFIX=/usr -DLINUXDEPLOY_EXECUTABLE=${{ steps.vars.outputs.BUILD_ROOT }}/linuxdeploy-x86_64.AppImage" >> $GITHUB_ENV
- - name: Install linuxdeploy
- if: ${{ matrix.triplet == 'x64-linux' }}
- uses: miurahr/install-linuxdeploy-action@v1
- with:
- dir: ${{ steps.vars.outputs.BUILD_ROOT }}
- plugins: qt appimage
- # transifex-client is not compatible with py >= 3.10
- # temporary band aid
- - uses: actions/setup-python@v2
- with:
- python-version: '3.9'
- - name: 🌍 Pull Translations
- shell: bash
- env:
- TX_TOKEN: ${{ secrets.TX_TOKEN }}
- run: |
- if [[ -z "${TX_TOKEN}" ]]; then
- echo "TX_TOKEN not set, skip tx pull"
- else
- pip install transifex-client>=0.14.3
- ./scripts/ci/pull_translations.sh
- fi
- - name: Prepare osx build env
- if: ${{ matrix.os == 'macos-10.15' }}
- run: |
- brew install automake bison flex
- echo $(brew --prefix bison)/bin >> $GITHUB_PATH
- echo $(brew --prefix flex)/bin >> $GITHUB_PATH
- echo "EXTRA_CMAKE_ARGS=-GXcode -DUSE_MAC_BUNDLING=OFF" >> $GITHUB_ENV
- sudo xcode-select -s /Applications/Xcode_12.app/Contents/Developer
- - name: 🌱 Install dependencies and generate project files
- shell: bash
- env:
- WORKSPACE: ${{ github.workspace }}
- VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
- run: |
- # Convert paths to bash compatible ones. Thanks to whoever decided to use drive letters and backslashes.
- CMAKE_BUILD_DIR=$( ${{ steps.vars.outputs.PATHCONVERT }} "${CMAKE_BUILD_DIR}" )
- VCPKG_ROOT=$( ${{ steps.vars.outputs.PATHCONVERT }} "${VCPKG_ROOT}" )
- SOURCE_DIR=$( ${{ steps.vars.outputs.PATHCONVERT }} "${WORKSPACE}" )
- source ./scripts/version_number.sh
- source ./scripts/ci/generate-version-details.sh
- overlay_ports=(${WORKSPACE}/${{ steps.vars.outputs.OVERLAY }} ${WORKSPACE}/vcpkg/overlay)
- echo "Building with $(IFS=\; ; echo "${overlay_ports[*]}")"
- cmake -S "${SOURCE_DIR}" \
- -B "${CMAKE_BUILD_DIR}" \
- -DCMAKE_BUILD_TYPE=${{ steps.vars.outputs.BUILD_TYPE }} \
- -DCMAKE_TOOLCHAIN_FILE="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \
- -DVCPKG_OVERLAY_PORTS=$(IFS=\; ; echo "${overlay_ports[*]}") \
- -DVCPKG_TARGET_TRIPLET="${{ matrix.triplet }}" \
- -DWITH_VCPKG=ON \
- -DWITH_SPIX=ON \
- -DAPP_VERSION="${APP_VERSION}" \
- -DAPP_VERSION_STR="${APP_VERSION_STR}" \
- -DAPP_PACKAGE_NAME="${APP_PACKAGE_NAME}" \
- -DENABLE_TESTS=ON \
- ${EXTRA_CMAKE_ARGS}
- - name: 📑 Upload Build Logs
- uses: actions/upload-artifact@v2
- if: failure()
- with:
- name: build-logs-${{ matrix.triplet }}
- path: ${{ steps.vars.outputs.VCPKG_ROOT }}/buildtrees/**/*.log
- - name: 🌋 Build
- run: |
- cmake --build "${{ env.CMAKE_BUILD_DIR }}" --config ${{ steps.vars.outputs.BUILD_TYPE }} # --target qfield
- - name: 🧫 Test
- shell: bash
- env:
- WORKSPACE: ${{ github.workspace }}
- run: |
- SOURCE_DIR=$( ${{ steps.vars.outputs.PATHCONVERT }} "${WORKSPACE}" )
- pip install -r "${SOURCE_DIR}/test/spix/requirements.txt"
- cd "${{ env.CMAKE_BUILD_DIR }}"
- ${TESTWRAPPER} ctest --output-on-failure -E '${{ steps.vars.outputs.EXCLUDE_TESTS }}' -C ${{ steps.vars.outputs.BUILD_TYPE }}
- - name: Package
- shell: bash
- run: |
- export LD_LIBRARY_PATH="${{ env.CMAKE_BUILD_DIR }}/vcpkg_installed/${{ matrix.triplet }}/lib/":${LD_LIBRARY_PATH}
- cmake --build "${{ env.CMAKE_BUILD_DIR }}" --target bundle --config Release
- case ${{ matrix.triplet }} in
- x64-linux)
- echo "ARTIFACT_PATHNAME=${{ env.CMAKE_BUILD_DIR }}/QField-x86_64.AppImage" >> $GITHUB_ENV
- echo "ARTIFACT_NAME=${{ steps.vars.outputs.CI_PACKAGE_FILE_BASENAME }}-linux-x64.AppImage" >> $GITHUB_ENV
- ;;
- x64-windows)
- ARTIFACT_PATHNAME=$(ls ${{ env.CMAKE_BUILD_DIR }}/QField-*-win64.* | head -n 1)
- ARTIFACT_NAME=$(basename $ARTIFACT_PATHNAME)
- echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV
- echo "ARTIFACT_NAME=${{ steps.vars.outputs.CI_PACKAGE_FILE_BASENAME }}-windows-x64.exe" >> $GITHUB_ENV
- ;;
- esac
- - name: 📑 Upload Package Logs
- uses: actions/upload-artifact@v2
- if: failure()
- with:
- name: package-logs-${{ matrix.triplet }}
- path: ${{ steps.vars.outputs.BUILD_ROOT }}/builddir/_CPack_Packages/**/*.log
- - name: 📦 Upload package
- if: ${{ env.ARTIFACT_NAME != null }}
- uses: actions/upload-artifact@v2
- with:
- name: "QField-dev-${{ matrix.triplet }}-${{ steps.vars.outputs.BUILD_TYPE }}"
- path: ${{ env.ARTIFACT_PATHNAME }}
- - name: 📊 Upload test report
- uses: actions/upload-artifact@v2
- with:
- name: "test-report-${{ matrix.triplet }}-${{ steps.vars.outputs.BUILD_TYPE }}"
- path: "${{ env.CMAKE_BUILD_DIR }}/report"
- - name: 🪔 Get the current release version
- id: get_version
- shell: bash
- run: |
- echo "::set-output name=version::${GITHUB_REF##*/}"
- - name: 🚀 Upload Release Asset
- if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') && env.ARTIFACT_NAME != null
- uses: shogo82148/actions-upload-release-asset@v1
- with:
- upload_url: ${{ github.event.release.upload_url }}
- asset_path: ${{ env.ARTIFACT_PATHNAME }}
- asset_name: ${{ env.ARTIFACT_NAME }}
- overwrite: true
|