-
Notifications
You must be signed in to change notification settings - Fork 27
130 lines (106 loc) · 5.09 KB
/
Copy pathbuild.yml
File metadata and controls
130 lines (106 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
name: Build
on:
pull_request:
workflow_dispatch:
inputs:
debug:
type: boolean
description: 'Enable TMate Debug'
required: false
default: false
env:
BUILD_TYPE: Release
MAKE_THREAD_NUM: 16
CMAKE_VERSION: '4.3.2'
jobs:
build:
strategy:
# Linux runs alongside Windows/macOS, but the engine's own Linux support is
# not yet verified -- keep a failing Linux leg from cancelling the others.
fail-fast: false
matrix:
os: ['windows-latest', 'macOS-latest', 'ubuntu-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Setup TMate Session
uses: mxschmitt/action-tmate@v3
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug }}
with:
detached: true
- name: Set XCode Version
run: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
if: runner.os == 'macOS'
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
if: runner.os == 'Windows'
# Qt's prebuilt Qt6::Gui transitively requires WrapOpenGL, so CMake's FindOpenGL needs the GL dev
# files (libOpenGL.so, libGLX.so, GL/gl.h). The runners only ship the runtime libraries by default.
- name: Setup Linux Dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev
if: runner.os == 'Linux'
- name: Checkout Repo
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: ${{env.CMAKE_VERSION}}
- name: Setup Conan
uses: conan-io/setup-conan@v1
- name: Config Conan Remote
run: conan remote add explosion https://conan.kindem.online/artifactory/api/conan/conan
# xorg/system (pulled in transitively by Qt on Linux) declares its X11 dev packages as system
# requirements; let Conan install them via apt instead of erroring out in the default 'check' mode.
- name: Allow Conan System Package Install
run: |
conf="$(conan config home)/global.conf"
echo "tools.system.package_manager:mode=install" >> "$conf"
echo "tools.system.package_manager:sudo=True" >> "$conf"
if: runner.os == 'Linux'
# Register the in-repo recipes in the local cache so the engine's 'conan install --build=missing'
# resolves them from this checkout: unchanged recipes hash to the revision already published on the
# remote (binaries are downloaded), changed ones get built locally, making recipe PRs self-contained.
- name: Export Conan Recipes
run: |
pip install pyyaml
python ThirdParty/ConanRecipes/build_recipes.py --export-only
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -G=Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCI=ON
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j ${{env.MAKE_THREAD_NUM}}
# Elevated Windows processes ignore VK_DRIVER_FILES, so register SwiftShader in the loader's trusted driver list.
- name: Register SwiftShader Vulkan Driver
if: runner.os == 'Windows'
shell: pwsh
run: |
$manifest = (Resolve-Path "${{github.workspace}}/build/Dist/Explosion/Binaries/vk_swiftshader_icd.json").Path
$driverRegistry = 'HKLM:\SOFTWARE\Khronos\Vulkan\Drivers'
New-Item -Path $driverRegistry -Force | Out-Null
New-ItemProperty -Path $driverRegistry -Name $manifest -PropertyType DWord -Value 0 -Force | Out-Null
- name: Test
working-directory: ${{github.workspace}}/build
run: ctest -C ${{env.BUILD_TYPE}} --extra-verbose
- name: Upload Rendering Test Artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: rendering-test-${{runner.os}}-${{runner.arch}}
path: ${{github.workspace}}/build/Test/Generated/RenderingSample
if-no-files-found: warn
retention-days: 14
- name: Install
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}}
# Build the test project (generated from the editor's Default template during 'Configure CMake') against the
# freshly installed engine, verifying the packaged engine and its full_deploy'd dependencies are consumable by
# a downstream project.
- name: Configure Test Project
run: cmake -B ${{github.workspace}}/TestProject/build -S ${{github.workspace}}/TestProject -G=Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENGINE_ROOT=${{github.workspace}}/Installed/Explosion
- name: Build Test Project
run: cmake --build ${{github.workspace}}/TestProject/build --config ${{env.BUILD_TYPE}} -j ${{env.MAKE_THREAD_NUM}}
- name: Install Test Project
run: cmake --build ${{github.workspace}}/TestProject/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}}