GHA windows build fixes. #5187
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Pull Request CI Build | |
on: | |
pull_request: | |
types: [opened, synchronize, reopened, labeled] | |
env: | |
APP_NAME: interface | |
BUILD_TYPE: Release | |
CI_BUILD: Github | |
GIT_COMMIT: ${{ github.sha }} | |
RELEASE_TYPE: PR | |
RELEASE_NUMBER: ${{ github.event.number }} | |
VERSION_CODE: ${{ github.event.number }} | |
# Sentry Crash Reporting | |
CMAKE_BACKTRACE_URL: ${{ secrets.MINIDUMP_TOKEN }} | |
CMAKE_BACKTRACE_TOKEN: PR_${{ github.event.number }}_${{ github.sha }} | |
# OSX specific variables | |
DEVELOPER_DIR: /Applications/Xcode_11.2.app/Contents/Developer | |
# We are using macOS SDK 10.12 to work around a lot of OpenGL issues in newer SDKs. | |
# There are crashes on startup, crashes on window resize, etc. on newer macOS SDKs. | |
MACOSX_DEPLOYMENT_TARGET: '10.12' | |
# WIN32 specific variables | |
PreferredToolArchitecture: X64 | |
# Ensure XZ always runs with muticore support | |
XZ_OPT: -T0 | |
jobs: | |
build: | |
name: "build (${{matrix.os}}, ${{matrix.build_type}})" | |
strategy: | |
matrix: | |
include: | |
- os: windows-2019 | |
build_type: full | |
- os: macOS-10.15 | |
build_type: full | |
- os: macOS-10.15 | |
build_type: client | |
- os: ubuntu-18.04 | |
build_type: full | |
apt-dependencies: mesa-common-dev libegl1 libglvnd-dev libdouble-conversion1 libpulse0 libsnappy1v5 libwebpdemux2 libwebpmux3 | |
- os: ubuntu-20.04 | |
build_type: full | |
apt-dependencies: mesa-common-dev libegl1 libglvnd-dev libdouble-conversion3 libpulse0 libsnappy1v5 libwebpdemux2 libwebpmux3 | |
- os: ubuntu-18.04 | |
build_type: android | |
apt-dependencies: mesa-common-dev libegl1 libglvnd-dev libdouble-conversion1 libpulse0 | |
fail-fast: false | |
runs-on: ${{matrix.os}} | |
if: github.event.action != 'labeled' || github.event.label.name == 'rebuild' | |
steps: | |
- name: Configure Build Environment 1 | |
shell: bash | |
id: buildenv1 | |
run: | | |
echo ::set-output name=github_sha_short::`echo $GIT_COMMIT | cut -c1-7` | |
echo "JOB_NAME=build (${{matrix.os}}, ${{matrix.build_type}})" >> $GITHUB_ENV | |
echo "APP_TARGET_NAME=$APP_NAME" >> $GITHUB_ENV | |
# Ununtu 20.04 build variables | |
if [[ "${{ matrix.os }}" = "ubuntu-20.04" ]]; then | |
echo "INSTALLER_EXT=*" >> $GITHUB_ENV | |
echo "VIRCADIA_QT_PATH=/opt/qt515" >> $GITHUB_ENV | |
echo "CMAKE_BUILD_EXTRA=-- -j$(nproc)" >> $GITHUB_ENV | |
if [[ "${{ matrix.os }}" = *"aarch64" ]]; then | |
echo "VCPKG_FORCE_SYSTEM_BINARIES=true" >> $GITHUB_ENV | |
fi | |
if [ "${{ matrix.build_type }}" = "full" ]; then | |
echo "CMAKE_EXTRA=-DVIRCADIA_CPU_ARCHITECTURE=" >> $GITHUB_ENV | |
else | |
echo "CMAKE_EXTRA=-DVIRCADIA_CPU_ARCHITECTURE= -DCLIENT_ONLY=1 -DBUILD_TOOLS:BOOLEAN=FALSE" >> $GITHUB_ENV | |
fi | |
else | |
# other Linux build variables | |
if [[ "${{ matrix.os }}" = "ubuntu-"* || "${{ matrix.os }}" = *"debian"* ]]; then | |
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV | |
echo "INSTALLER_EXT=*" >> $GITHUB_ENV | |
echo "CMAKE_BUILD_EXTRA=-- -j$(nproc)" >> $GITHUB_ENV | |
if [[ "${{ matrix.os }}" = *"aarch64" ]]; then | |
echo "VCPKG_FORCE_SYSTEM_BINARIES=true" >> $GITHUB_ENV | |
fi | |
if [ "${{ matrix.build_type }}" = "full" ]; then | |
echo "CMAKE_EXTRA=-DVIRCADIA_CPU_ARCHITECTURE= -DHIFI_PYTHON_EXEC:FILEPATH=$(which python3)" >> $GITHUB_ENV | |
else | |
echo "CMAKE_EXTRA=-DVIRCADIA_CPU_ARCHITECTURE= -DCLIENT_ONLY=1 -DBUILD_TOOLS:BOOLEAN=FALSE -DHIFI_PYTHON_EXEC:FILEPATH=$(which python3)" >> $GITHUB_ENV | |
fi | |
fi | |
fi | |
# Mac build variables | |
if [ "${{ matrix.os }}" = "macOS-10.15" ]; then | |
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV | |
echo "INSTALLER_EXT=dmg" >> $GITHUB_ENV | |
if [ "${{ matrix.build_type }}" = "full" ]; then | |
echo "CMAKE_EXTRA=-DVIRCADIA_CPU_ARCHITECTURE= -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=OFF -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -G Xcode" >> $GITHUB_ENV | |
else | |
echo "CMAKE_EXTRA=-DVIRCADIA_CPU_ARCHITECTURE= -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -DCLIENT_ONLY=1 -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=OFF -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -G Xcode" >> $GITHUB_ENV | |
fi | |
echo "APP_TARGET_NAME=Vircadia" >> $GITHUB_ENV | |
fi | |
# Windows build variables | |
if [ "${{ matrix.os }}" = "windows-2019" ]; then | |
echo "PYTHON_EXEC=python" >> $GITHUB_ENV | |
echo "INSTALLER_EXT=exe" >> $GITHUB_ENV | |
if [ "${{ matrix.build_type }}" = "full" ]; then | |
echo "CMAKE_EXTRA=-A x64" >> $GITHUB_ENV | |
else | |
echo "CMAKE_EXTRA=-A x64 -DCLIENT_ONLY=1" >> $GITHUB_ENV | |
fi | |
fi | |
# Android + Quest build variables | |
if [[ "${{ matrix.build_type }}" == "android" ]]; then | |
HIFI_ANDROID_PRECOMPILED="${{runner.workspace}}/dependencies" | |
echo "HIFI_ANDROID_PRECOMPILED=$HIFI_ANDROID_PRECOMPILED" >> $GITHUB_ENV | |
mkdir $HIFI_ANDROID_PRECOMPILED | |
echo "INSTALLER_EXT=apk" >> $GITHUB_ENV | |
fi | |
# Configuration is broken into two steps because you can't set an env var and also reference it in the same step | |
- name: Configure Build Environment 2 | |
shell: bash | |
run: | | |
echo "${{ steps.buildenv1.outputs.symbols_archive }}" | |
echo "GIT_COMMIT_SHORT=${{ steps.buildenv1.outputs.github_sha_short }}" >> $GITHUB_ENV | |
if [[ "${{ matrix.build_type }}" != "android" ]]; then | |
if [ "${{ matrix.build_type }}" = "full" ]; then | |
echo "ARTIFACT_PATTERN=Vircadia-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV | |
echo "INSTALLER=Vircadia-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV | |
else | |
echo "ARTIFACT_PATTERN=Vircadia-Interface-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV | |
echo "INSTALLER=Vircadia-Interface-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV | |
fi | |
else | |
echo "ARTIFACT_PATTERN=*.$INSTALLER_EXT" >> $GITHUB_ENV | |
fi | |
- name: Clear Working Directory | |
if: startsWith(matrix.os, 'windows') || contains(matrix.os, 'self-hosted') | |
shell: bash | |
working-directory: ${{runner.workspace}} | |
run: rm -rf ./* | |
- uses: actions/checkout@v1 | |
with: | |
submodules: false | |
fetch-depth: 1 | |
- name: Checkout ACME submodule | |
run: git submodule update --init libraries/networking/src/acme | |
- name: Install dependencies | |
shell: bash | |
if: startsWith(matrix.os, 'ubuntu') || contains(matrix.os, 'debian') || startsWith(matrix.os, 'macOS') | |
run: | | |
if [[ "${{ matrix.os }}" =~ "ubuntu" || "${{ matrix.os }}" =~ "debian" ]]; then | |
echo "Installing Python Modules:" | |
pip3 install distro || exit 1 | |
# workaround https://github.com/orgs/community/discussions/47863 | |
sudo apt-mark hold grub-efi-amd64-signed | |
echo "Updating apt repository index" | |
sudo apt update || exit 1 | |
echo "Installing apt packages" | |
sudo apt install -y ${{ matrix.apt-dependencies }} || exit 1 | |
if [[ "${{ matrix.os }}" = "ubuntu-20.04" ]]; then | |
sudo apt-add-repository ppa:beineri/opt-qt-5.15.2-focal | |
sudo apt update | |
sudo apt upgrade | |
sudo apt install cmake g++ zip libgl-dev libssl-dev | |
sudo apt install qt5153d qt5153d-dbg qt515base qt515base-dbg qt515charts-no-lgpl qt515connectivity qt515connectivity-dbg qt515datavis3d-no-lgpl qt515declarative qt515declarative-dbg qt515doc qt515gamepad qt515graphicaleffects qt515graphicaleffects-dbg qt515imageformats qt515imageformats-dbg qt515location qt515location-dbg qt515lottie-no-lgpl qt515multimedia qt515multimedia-dbg qt515networkauth-no-lgpl qt515opcua qt515opcua-dbg qt515quick3d-no-lgpl qt515quickcontrols qt515quickcontrols-dbg qt515quickcontrols2 qt515quickcontrols2-dbg qt515quicktimeline-no-lgpl qt515remoteobjects qt515remoteobjects-dbg qt515script qt515script-dbg qt515scxml qt515scxml-dbg qt515sensors qt515sensors-dbg qt515serialbus qt515serialbus-dbg qt515serialport qt515serialport-dbg qt515speech qt515speech-dbg qt515svg qt515svg-dbg qt515tools qt515tools-dbg qt515translations qt515wayland qt515wayland-dbg qt515webchannel qt515webchannel-dbg qt515webengine qt515webengine-dbg qt515webglplugin-no-lgpl qt515websockets qt515websockets-dbg qt515x11extras qt515x11extras-dbg qt515xmlpatterns qt515xmlpatterns-dbg | |
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX | |
sudo df -h | |
# attempt to free up space | |
sudo swapoff -a | |
sudo rm -f /swapfile | |
sudo apt clean | |
docker rmi $(docker image ls -aq) | |
# downgrade libstdc++6 to what is normal for Ubuntu 20.04 | |
sudo apt-get install --allow-downgrades --no-remove --reinstall -y libstdc++6=10.5.0-1ubuntu1~20.04 | |
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX | |
sudo df -h | |
fi | |
else # macOS | |
echo "Downloading MacOSX10.12 SDK.." | |
# TODO: do this in cmake or python build scripts to make use of centralized external asset configuration with fallback gateways. | |
curl --progress-bar -L -o macOS_SDK10.12.4.tar.xz "https://ipfs.vircadia.dev/ipfs/QmTDLEYdo616YgZKSYC2mySSw8EKQWTz7CH8UyMupMBpzK?filename=macOS_SDK10.12.4.tar.xz" || exit 1 | |
echo " done\n" | |
echo "Checking MacOSX10.12 SDK.." | |
echo "c00e03cb64bed8d0d75d7a01c93de094b6ffaa3bc3318e7b29a9bdc354f0e29e363c454b7db89db8a3b78e9702668d1c661f1af279807de8db11accecb0ca498 macOS_SDK10.12.4.tar.xz" >> macOS_SDK10.12.4.tar.xz.checksum | |
shasum -a 512 -w -c macOS_SDK10.12.4.tar.xz.checksum | |
echo "Extracting MacOSX10.12 SDK.." | |
tar -xf macOS_SDK10.12.4.tar.xz || exit 1 | |
echo " done\n" | |
echo "Installing MacOSX10.12 SDK.." | |
# cp always sets an error code while copying the SDK so we return 0 when that happens. | |
sudo cp -rp MacOSX10.12.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ || exit 0 | |
echo " done" | |
fi | |
- name: Override NSIS | |
shell: pwsh | |
if: startsWith(matrix.os, 'windows') | |
run: choco install nsis --version=3.06.1 --allow-downgrade | |
- name: Create Build Environment | |
shell: bash | |
run: cmake -E make_directory "${{runner.workspace}}/build" | |
- name: Configure CMake | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DVCPKG_BUILD_TYPE=release $CMAKE_EXTRA | |
- name: Compress cmake logs | |
if: always() | |
shell: bash | |
run: | | |
if [ "${{ matrix.os }}" == "macOS-10.15" ]; then | |
TAR=gtar | |
else | |
TAR=tar | |
fi | |
if [ ${{ env.CI_WORKSPACE }} ]; then | |
find "$CI_WORKSPACE/vircadia-files/vcpkg" -name '*log' -type f -print0 | $TAR --null --force-local -T - -c --xz -v -f "${{ runner.workspace }}/cmake-logs-${{ matrix.os }}-${{ github.event.number }}.tar.xz" | |
else | |
find "$HOME/vircadia-files/vcpkg" -name '*log' -type f -print0 | $TAR --null --force-local -T - -c --xz -v -f "${{ runner.workspace }}/cmake-logs-${{ matrix.os }}-${{ github.event.number }}.tar.xz" | |
fi | |
- name: Archive cmake logs | |
if: always() | |
uses: actions/upload-artifact@v2 | |
with: | |
name: cmake-logs-${{ matrix.os }}-${{ github.event.number }}.tar.xz | |
path: ${{ runner.workspace }}/cmake-logs-${{ matrix.os }}-${{ github.event.number }}.tar.xz | |
if-no-files-found: error | |
- name: Build Domain Server | |
if: matrix.build_type == 'full' | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --build . --config $BUILD_TYPE --target domain-server $CMAKE_BUILD_EXTRA | |
- name: Build Assignment Client | |
if: matrix.build_type == 'full' | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --build . --config $BUILD_TYPE --target assignment-client $CMAKE_BUILD_EXTRA | |
- name: Build Oven | |
if: matrix.build_type == 'full' && (matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-18.04') | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --build . --config $BUILD_TYPE --target oven $CMAKE_BUILD_EXTRA | |
- name: Build ICE Server | |
if: matrix.build_type == 'full' && (matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-18.04') | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --build . --config $BUILD_TYPE --target ice-server $CMAKE_BUILD_EXTRA | |
- name: Build Deb Package | |
if: matrix.build_type == 'full' && (matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-18.04') | |
shell: bash | |
run: DEBVERSION=$RELEASE_NUMBER DEBEMAIL="namark@digisomni.com" DEBFULLNAME="Na Mark" DEBBUILDDIR=${{runner.workspace}}/build ./pkg-scripts/make-deb-server | |
- name: Build Application | |
if: matrix.build_type == 'full' || matrix.build_type == 'client' | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --build . --config $BUILD_TYPE --target $APP_TARGET_NAME $CMAKE_BUILD_EXTRA | |
- name: Build Console | |
if: matrix.build_type == 'full' || matrix.os == 'windows-2019' | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --build . --config $BUILD_TYPE --target packaged-server-console $CMAKE_BUILD_EXTRA | |
- name: Build Installer | |
if: matrix.build_type != 'android' && (matrix.os != 'ubuntu-20.04' && matrix.os != 'ubuntu-18.04') | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: | | |
echo "Retry code from https://unix.stackexchange.com/a/137639" | |
function fail { | |
echo $1 >&2 | |
exit 1 | |
} | |
function retry { | |
local n=1 | |
local max=5 | |
local delay=15 | |
while true; do | |
"$@" && break || { | |
if [[ $n -lt $max ]]; then | |
((n++)) | |
echo "Command failed. Attempt $n/$max:" | |
sleep $delay; | |
else | |
fail "The command has failed after $n attempts." | |
fi | |
} | |
done | |
} | |
retry cmake --build . --config $BUILD_TYPE --target package $CMAKE_BUILD_EXTRA | |
# As of 05/17/21 GitHub Virtual Environments changed their "Ubuntu 18.04.5 LTS" image to include two versions of CMake for Android | |
# https://github.com/actions/virtual-environments/blob/ubuntu18/20210517.1/images/linux/Ubuntu1804-README.md | |
# Removing 3.18.1 version of CMake as its not compatible with our Android build. | |
# It will fall back to 3.10.2 which is already installed | |
- name: Nuke CMake 3.18.1-g262b901 | |
if: matrix.build_type == 'android' | |
shell: bash | |
working-directory: ${{runner.workspace}}/vircadia | |
run: | | |
/usr/local/lib/android/sdk/tools/bin/sdkmanager --uninstall 'cmake;3.18.1' | |
- name: Build for Android + Quest | |
if: matrix.build_type == 'android' | |
shell: bash | |
working-directory: ${{runner.workspace}}/vircadia | |
run: | | |
echo "Pre-cache the vcpkg managed dependencies" | |
$PYTHON_EXEC prebuild.py --build-root ${{runner.workspace}}/build --android interface | |
cd android | |
# Pre-cache the gradle dependencies | |
./gradlew -m tasks -PHIFI_ANDROID_PRECOMPILED=$HIFI_ANDROID_PRECOMPILED | |
# Build! | |
./build_android.sh | |
- name: Output system stats | |
if: ${{ always() }} | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: | | |
echo "Disk usage:" | |
df -h | |
- name: Output Installer Logs | |
if: failure() && matrix.os == 'windows-2019' | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: cat ./_CPack_Packages/win64/NSIS/NSISOutput.log | |
- name: Upload full build | |
if: matrix.build_type == 'full' && matrix.os != 'ubuntu-18.04' && matrix.os != 'ubuntu-20.04' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build-full-${{ matrix.os }}-${{ github.event.number }} | |
path: ${{ runner.workspace }}/build/Vircadia-PR${{ github.event.number }}-*.${{ env.INSTALLER_EXT }} | |
if-no-files-found: error | |
- name: Upload client build | |
if: matrix.build_type == 'client' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build-interface-${{ matrix.os }}-${{ github.event.number }} | |
path: ${{ runner.workspace }}/build/Vircadia-Interface-PR${{ github.event.number }}-*.${{ env.INSTALLER_EXT }} | |
if-no-files-found: error | |
- name: Upload Deb Packages | |
if: matrix.os == 'ubuntu-20.04' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build-server-${{ matrix.os }}-${{ github.event.number }} | |
path: ./*.deb | |
if-no-files-found: error | |