Test Conan GitHub Actions #13
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
# Copyright 2013-2019 High Fidelity, Inc. | ||
# Copyright 2020-2022 Vircadia contributors | ||
# Copyright 2021-2025 Overte e.V. | ||
# SPDX-License-Identifier: Apache-2.0 | ||
name: Windows Release Build | ||
on: | ||
push: | ||
tags: | ||
# Release tags. E.g. 2024.06.1 | ||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet | ||
- "[0-9][0-9][0-9][0-9].[0-9][0-9].**" | ||
env: | ||
APP_NAME: interface | ||
BUILD_TYPE: Release | ||
GIT_COMMIT: ${{ github.sha }} | ||
PRODUCTION_BUILD: true | ||
RELEASE_TYPE: PRODUCTION | ||
RELEASE_NUMBER: ${{ github.ref_name }} | ||
STABLE_BUILD: 1 | ||
UPLOAD_BUCKET: overte-public | ||
UPLOAD_REGION: fra1 | ||
UPLOAD_ENDPOINT: "https://fra1.digitaloceanspaces.com" | ||
CMAKE_BACKTRACE_URL: ${{ secrets.SENTRY_MINIDUMP_ENDPOINT }} | ||
CMAKE_BACKTRACE_TOKEN: ${{ github.ref_name }}_Windows_${{ github.sha }} | ||
# WIN-specific variables | ||
PreferredToolArchitecture: X64 | ||
jobs: | ||
build: | ||
name: "${{matrix.os}} | ||
strategy: | ||
matrix: | ||
include: | ||
- os: windows-2019 | ||
build_type: full | ||
conan_qt: true | ||
fail-fast: false | ||
runs-on: ${{matrix.os}} | ||
steps: | ||
- name: Configure build environment 1 | ||
shell: bash | ||
id: buildenv1 | ||
run: | | ||
echo "GIT_COMMIT_SHORT=`echo ${{ github.sha }} | cut -c1-7`" >> $GITHUB_ENV | ||
if [[ "${{ github.ref_name }}" == *"rc"* ]]; then # release candidate | ||
# The uploader already creates a subfolder for each RELEASE_NUMBER. | ||
echo "UPLOAD_PREFIX=build/overte/release-candidate/" >> $GITHUB_ENV | ||
else # release | ||
echo "UPLOAD_PREFIX=build/overte/release/" >> $GITHUB_ENV | ||
fi | ||
echo "JOB_NAME=${{matrix.os}}, ${{matrix.build_type}}" >> $GITHUB_ENV | ||
echo "APP_TARGET_NAME=$APP_NAME" >> $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" >> $GITHUB_ENV | ||
echo "SYMBOL_REGEX=\(exe\|dll\|pdb\)" >> $GITHUB_ENV | ||
echo "SYMBOLS_ARCHIVE=$RELEASE_NUMBER-${{ github.sha }}-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 | ||
# 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 "BUILD_NUMBER=$GIT_COMMIT_SHORT" >> $GITHUB_ENV | ||
echo "ARTIFACT_PATTERN=Overte-$RELEASE_NUMBER.$INSTALLER_EXT" >> $GITHUB_ENV | ||
echo "CLIENT_ONLY=FALSE" >> $GITHUB_ENV | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: false | ||
fetch-depth: 1 | ||
- name: Override NSIS | ||
shell: pwsh | ||
if: startsWith(matrix.os, 'windows') | ||
run: choco install nsis --allow-downgrade --version=3.06.1 | ||
- 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 | ||
shell: bash | ||
run: | | ||
conan profile detect | ||
conan remote add overte https://artifactory.overte.org/artifactory/api/conan/overte -f | ||
echo "tools.system.package_manager:mode = install" >> ~/.conan2/global.conf | ||
- name: Install Conan dependencies | ||
shell: bash | ||
run: conan install . -s compiler.cppstd=17 -s build_type=$BUILD_TYPE -o '&:with_qt='$conan_qt -b missing -pr:b=default -of build | ||
- name: Configure CMake | ||
working-directory: build | ||
shell: bash | ||
run: cmake --preset conan-${BUILD_TYPE,,} -DJSDOC_ENABLED:BOOL=TRUE -DCLIENT_ONLY:BOOLEAN=$CLIENT_ONLY -DBYPASS_SIGNING:BOOLEAN=TRUE $CMAKE_EXTRA | ||
- name: Build application | ||
working-directory: ${{runner.workspace}}/build | ||
shell: bash | ||
run: cmake --build . --target $APP_TARGET_NAME $CMAKE_BUILD_EXTRA | ||
- name: Build domain server | ||
working-directory: ${{runner.workspace}}/build | ||
shell: bash | ||
run: cmake --build . --target domain-server $CMAKE_BUILD_EXTRA | ||
- name: Build assignment client | ||
working-directory: ${{runner.workspace}}/build | ||
shell: bash | ||
run: cmake --build . --target assignment-client $CMAKE_BUILD_EXTRA | ||
- name: Build console | ||
working-directory: ${{runner.workspace}}/build | ||
shell: bash | ||
run: cmake --build . --target packaged-server-console $CMAKE_BUILD_EXTRA | ||
- name: Build installer | ||
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 | ||
#- 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:ARTIFACT_PATTERN} | ||
- 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() && startsWith(matrix.os, 'windows') | ||
shell: bash | ||
working-directory: ${{runner.workspace}}/build | ||
run: cat ./_CPack_Packages/win64/NSIS/NSISOutput.log | ||
- name: Upload artifact to S3 | ||
shell: bash | ||
working-directory: ${{runner.workspace}}/build | ||
env: | ||
AWS_ACCESS_KEY_ID: ${{ secrets.s3_access_key_id }} | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.s3_secret_access_key }} | ||
run: $PYTHON_EXEC $GITHUB_WORKSPACE/tools/ci-scripts/upload.py | ||
- name: Upload artifact to GitHub | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ env.ARTIFACT_PATTERN }} | ||
path: ${{runner.workspace}}/build/${{ env.ARTIFACT_PATTERN }} | ||
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" -regex ".*\.$SYMBOL_REGEX" -exec cp -r {} $SYMBOLS_TEMP \; | ||
cd $SYMBOLS_TEMP | ||
$ZIP_COMMAND $ZIP_ARGS ../$SYMBOLS_ARCHIVE . | ||
- name: Upload debug symbols to GitHub | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ env.SYMBOLS_ARCHIVE }} | ||
path: ${{runner.workspace}}/${{ env.SYMBOLS_ARCHIVE }} | ||
if-no-files-found: error | ||
- name: Clear Working Directories | ||
if: contains(matrix.runner, 'linux_aarch64') | ||
shell: bash | ||
run: | | ||
rm -rf ./* | ||
rm -rf ~/overte-files | ||
rm -rf ~/.cache |