mirror of
https://github.com/overte-org/overte.git
synced 2025-08-28 19:45:56 +02:00
303 lines
12 KiB
YAML
303 lines
12 KiB
YAML
# Copyright 2013-2019 High Fidelity, Inc.
|
|
# Copyright 2020-2022 Vircadia contributors
|
|
# Copyright 2021-2025 Overte e.V.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
name: Master CI Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
env:
|
|
APP_NAME: interface
|
|
BUILD_TYPE: Release
|
|
GIT_COMMIT: ${{ github.sha }}
|
|
UPLOAD_BUCKET: overte-public
|
|
UPLOAD_REGION: fra1
|
|
UPLOAD_ENDPOINT: "https://fra1.digitaloceanspaces.com"
|
|
|
|
# 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'
|
|
|
|
# WIN-specific variables
|
|
PreferredToolArchitecture: X64
|
|
|
|
# Specify build preset, since on Windows, `cmake --build` appears to be unaware of of which build preset to use, using defaults instead.
|
|
CMAKE_BUILD_EXTRA: --preset conan-release
|
|
|
|
jobs:
|
|
build:
|
|
name: "${{matrix.os}}"
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: Windows 2022
|
|
runner: windows-2022
|
|
build_type: full
|
|
qt_source: source
|
|
#- os: macOS 10.15
|
|
# runner: macOS-10.15
|
|
# build_type: full
|
|
# qt_source: source
|
|
#- os: Ubuntu 22.04
|
|
# runner: ubuntu-latest
|
|
# build_type: full
|
|
# qt_source: source
|
|
# apt-dependencies: mesa-common-dev libegl1 libglvnd-dev libdouble-conversion3 libpulse0 libsnappy1v5 libwebpdemux2 libwebpmux3 python3-github python3-distro
|
|
fail-fast: false
|
|
runs-on: ${{matrix.runner}}
|
|
steps:
|
|
- name: Configure build environment 1
|
|
shell: bash
|
|
id: buildenv1
|
|
run: |
|
|
|
|
echo "UPLOAD_PREFIX=build/overte/master" >> $GITHUB_ENV
|
|
echo "{github_sha_short}={`echo $GIT_COMMIT | cut -c1-7`}" >> $GITHUB_OUTPUT
|
|
echo "JOB_NAME=build (${{matrix.os}}, ${{matrix.build_type}})" >> $GITHUB_ENV
|
|
echo "APP_TARGET_NAME=$APP_NAME" >> $GITHUB_ENV
|
|
# Linux build variables
|
|
if [[ "${{ matrix.os }}" =~ "Ubuntu" ]]; then
|
|
echo "CONAN_CPPSTD=gnu17" >> $GITHUB_ENV
|
|
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV
|
|
echo "INSTALLER_EXT=tgz" >> $GITHUB_ENV
|
|
echo "CMAKE_BUILD_EXTRA=$CMAKE_BUILD_EXTRA -- -j$(nproc)" >> $GITHUB_ENV
|
|
echo "CMAKE_EXTRA=-DOVERTE_CPU_ARCHITECTURE=-msse3 -DBUILD_TOOLS:BOOLEAN=FALSE -DHIFI_PYTHON_EXEC:FILEPATH=$(which python3)" >> $GITHUB_ENV
|
|
echo "CONAN_PROFILE=default" >> $GITHUB_ENV
|
|
fi
|
|
# Mac build variables
|
|
if [[ "${{ matrix.os }}" =~ "macOS" ]]; then
|
|
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV
|
|
echo "ZIP_COMMAND=zip" >> $GITHUB_ENV
|
|
echo "ZIP_ARGS=-r" >> $GITHUB_ENV
|
|
echo "INSTALLER_EXT=dmg" >> $GITHUB_ENV
|
|
echo "CMAKE_EXTRA=-DOVERTE_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
|
|
echo "symbols_archive=${BUILD_NUMBER}-${{ matrix.build_type }}-mac-symbols.zip" >> $GITHUB_ENV
|
|
echo "APP_TARGET_NAME=Overte" >> $GITHUB_ENV
|
|
echo "CONAN_PROFILE=default" >> $GITHUB_ENV
|
|
fi
|
|
# Windows build variables
|
|
if [[ "${{ matrix.os }}" =~ "Windows" ]]; then
|
|
echo "CONAN_CPPSTD=17" >> $GITHUB_ENV
|
|
echo "PYTHON_EXEC=python" >> $GITHUB_ENV
|
|
echo "ZIP_COMMAND=7z" >> $GITHUB_ENV
|
|
echo "ZIP_ARGS=a" >> $GITHUB_ENV
|
|
echo "INSTALLER_EXT=exe" >> $GITHUB_ENV
|
|
echo "CMAKE_EXTRA=-A x64 -DJSDOC_ENABLED:BOOL=TRUE" >> $GITHUB_ENV
|
|
echo "SYMBOL_REGEX=\(exe\|dll\|pdb\)" >> $GITHUB_ENV
|
|
echo "symbols_archive=${BUILD_NUMBER}-${{ matrix.build_type }}-win-symbols.zip" >> $GITHUB_ENV
|
|
# echo "HF_PFX_PASSPHRASE=${{secrets.pfx_key}}" >> $GITHUB_ENV
|
|
# echo "HF_PFX_FILE=${{runner.workspace}}\build\codesign.pfx" >> $GITHUB_ENV
|
|
if [[ "${{ matrix.os }}" = "Windows 2022" ]]; then
|
|
echo "CONAN_PROFILE='./tools/conan-profiles/vs-22-release'" >> $GITHUB_ENV
|
|
else
|
|
echo "Not sure which Conan profile to use. Exiting." && exit 1
|
|
fi
|
|
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 "ARTIFACT_PATTERN=Overte-*.$INSTALLER_EXT" >> $GITHUB_ENV
|
|
echo "GIT_COMMIT_SHORT=${{ steps.buildenv1.outputs.github_sha_short }}" >> $GITHUB_ENV
|
|
# Build type variables
|
|
if [ "${{ matrix.build_type }}" = "full" ]; then
|
|
echo "INSTALLER=Overte-${{ github.event.number }}_${{ github.sha }}-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV
|
|
else
|
|
echo "INSTALLER=Overte-Interface-master-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: false
|
|
fetch-depth: 1
|
|
|
|
- name: Cache conan
|
|
uses: actions/cache@v4
|
|
with:
|
|
key: conan-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('conanfile.py') }}
|
|
path: ~/.conan2/
|
|
|
|
|
|
- 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 "Updating apt repository index"
|
|
sudo apt update || exit 1
|
|
|
|
echo "Installing apt packages"
|
|
sudo apt install -y ${{ matrix.apt-dependencies }} || exit 1
|
|
|
|
echo "Installing Python Modules"
|
|
pip3 install boto3 || exit 1
|
|
|
|
else # macOS
|
|
echo "Downloading MacOSX10.12 SDK.."
|
|
curl --progress-bar -L -o macOS_SDK10.12.4.tar.xz "https://data.moto9000.moe/overte_packages/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 Windows package versions
|
|
shell: pwsh
|
|
if: startsWith(matrix.os, 'windows')
|
|
run: |
|
|
choco install nsis --allow-downgrade --version=3.06.1
|
|
choco install cmake --allow-downgrade --version=3.31.6 # Our dependencies don't support CMake 4.0 yet.
|
|
Invoke-WebRequest https://build-deps.overte.org/conan/nsis-overte-plugins/NSIS-hifi-plugins-1.0.zip -OutFile NSIS-hifi-plugins.zip
|
|
Expand-Archive -LiteralPath 'NSIS-hifi-plugins.zip' -DestinationPath 'C:/Program Files (x86)/'
|
|
|
|
- name: Install Python modules
|
|
if: startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'macOS')
|
|
shell: bash
|
|
run: $PYTHON_EXEC -m pip install boto3 PyGithub conan
|
|
|
|
- name: Prepare Conan Build Environment
|
|
uses: ./.github/actions/setup-conan
|
|
|
|
- name: Install Conan dependencies
|
|
uses: ./.github/actions/conan-install
|
|
with:
|
|
qt_source: ${{matrix.qt_source}}
|
|
build_type: ${{env.BUILD_TYPE}}
|
|
cppstd: ${{env.CONAN_CPPSTD}}
|
|
conan_profile: ${{env.CONAN_PROFILE}}
|
|
|
|
- name: Upload dependency source backups
|
|
shell: bash
|
|
env:
|
|
# Token for uploading dependency source backups.
|
|
CONAN_BUILD_DEPENDENCIES_BACKUP_UPLOAD_TOKEN: ${{ secrets.CONAN_BUILD_DEPENDENCIES_BACKUP_UPLOAD_TOKEN }}
|
|
run: conan cache backup-upload
|
|
|
|
- name: Cleanup Conan dependencies
|
|
run: conan cache clean "*" -sbd
|
|
shell: bash
|
|
|
|
- name: Configure CMake
|
|
shell: bash
|
|
run: |
|
|
if [[ "${{ matrix.os }}" =~ "Windows" ]]; then
|
|
# This syntax requires CMake 3.23
|
|
cmake --preset conan-default -DOVERTE_GIT_COMMIT_SHORT=$GIT_COMMIT_SHORT -DOVERTE_RELEASE_TYPE=NIGHTLY $CMAKE_EXTRA
|
|
else
|
|
# This syntax requires CMake 3.23
|
|
cmake --preset conan-${BUILD_TYPE,,} -DOVERTE_GIT_COMMIT_SHORT=$GIT_COMMIT_SHORT -DOVERTE_RELEASE_TYPE=NIGHTLY $CMAKE_EXTRA
|
|
fi
|
|
|
|
- name: Build application
|
|
shell: bash
|
|
run: cmake --build . --target $APP_TARGET_NAME $CMAKE_BUILD_EXTRA
|
|
|
|
- name: Build domain server
|
|
shell: bash
|
|
run: cmake --build . --target domain-server $CMAKE_BUILD_EXTRA
|
|
|
|
- name: Build assignment client
|
|
shell: bash
|
|
run: cmake --build . --target assignment-client $CMAKE_BUILD_EXTRA
|
|
|
|
- name: Build console
|
|
shell: bash
|
|
run: cmake --build . --target packaged-server-console $CMAKE_BUILD_EXTRA
|
|
|
|
- name: Build installer
|
|
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
|
|
|
|
#- name: Sign installer (Windows)
|
|
# if: startsWith(matrix.os, 'windows')
|
|
# shell: powershell
|
|
# working-directory: C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64
|
|
# run: .\signtool.exe sign /fd sha256 /f ${{runner.workspace}}\build\codesign.pfx /p ${{secrets.pfx_key}} /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 ${{runner.workspace}}\build\${env:INSTALLER}
|
|
|
|
- name: Output system stats
|
|
if: ${{ always() }}
|
|
working-directory: build
|
|
shell: bash
|
|
run: |
|
|
echo "Disk usage:"
|
|
df -h
|
|
|
|
- name: Output installer logs
|
|
if: failure() && startsWith(matrix.os, 'windows')
|
|
shell: bash
|
|
working-directory: build
|
|
run: cat ./_CPack_Packages/win64/NSIS/NSISOutput.log
|
|
|
|
- name: Upload artifact to GitHub
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ env.INSTALLER }}
|
|
path: build/Overte-*
|
|
if-no-files-found: error
|
|
|
|
#- name: Archive symbols
|
|
# if: startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'macOS')
|
|
# working-directory: ${{runner.workspace}}
|
|
# shell: bash
|
|
# run: |
|
|
# SYMBOLS_TEMP="symbols-temp"
|
|
# mkdir $SYMBOLS_TEMP
|
|
# find "./build" \( -path '*/tools/gpu-frame-player/*' -or -path '*/interface/*' -or -path '*/plugins/*' \) -regex ".*\.$SYMBOL_REGEX" -exec cp -r {} $SYMBOLS_TEMP \;
|
|
# cd $SYMBOLS_TEMP
|
|
# $ZIP_COMMAND $ZIP_ARGS ../${{ steps.buildenv1.outputs.symbols_archive }} .
|
|
#- name: Upload symbols
|
|
# if: startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'macOS')
|
|
# working-directory: ${{runner.workspace}}
|
|
# shell: bash
|
|
# run: |
|
|
# curl --data-binary @${{ steps.buildenv1.outputs.symbols_archive }} "$CMAKE_BACKTRACE_URL/post?format=symbols&token=$CMAKE_BACKTRACE_SYMBOLS_TOKEN&upload_file=${{steps.buildenv1.outputs.symbols_archive}}&tag=$BUILD_NUMBER"
|
|
#- name: Debug list symbols
|
|
# if: startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'macOS')
|
|
# working-directory: ${{runner.workspace}}
|
|
# shell: bash
|
|
# run: |
|
|
# unzip -v "${{runner.workspace}}/${{ steps.buildenv1.outputs.symbols_archive }}"
|
|
#- name: Upload debug list symbols
|
|
# if: startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'macOS')
|
|
# uses: actions/upload-artifact@v1
|
|
# with:
|
|
# name: symbols
|
|
# path: ${{runner.workspace}}/${{ steps.buildenv1.outputs.symbols_archive }}
|