Merge pull request #1812 from AleziaKurdis/createAppFixSoundEntityIco… #82
This file contains hidden or 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
| # 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 | |
| # We use a third-party runner hosted by depot.dev to avoid timing out in case Qt has to be built from source. | |
| runner: depot-windows-2022-16 | |
| arch: x86_64 | |
| 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_HOME=~/.conan2" >> $GITHUB_ENV | |
| 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 "CONAN_HOME=~/.conan2" >> $GITHUB_ENV | |
| 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 | |
| # Try to avoid hitting Windows' PATH limit. | |
| echo "CONAN_HOME=C:\Conan" >> $GITHUB_ENV | |
| 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: 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 html5lib setuptools | |
| - name: Prepare Conan Build Environment | |
| uses: ./.github/actions/setup-conan | |
| - name: Cache conan | |
| uses: actions/cache@v4 | |
| with: | |
| key: conan-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('conanfile.py') }} | |
| path: ${{ env.CONAN_HOME }} | |
| - 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 | |
| if: always() && steps.conan-cache.cache-hit != 'true' | |
| run: conan cache clean "*" -sbd | |
| shell: bash | |
| - name: Save Conan cache | |
| if: always() && steps.conan-cache.cache-hit != 'true' | |
| uses: actions/cache/save@v4 | |
| with: | |
| key: conan-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('conanfile.py') }} | |
| path: ${{ env.CONAN_HOME }} | |
| - 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 }} |