forked from godotengine/godot-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
248 lines (222 loc) Β· 9.47 KB
/
ci-cmake.yml
File metadata and controls
248 lines (222 loc) Β· 9.47 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
name: Continuous integration
on:
workflow_call:
env:
# Only used for the cache key. Increment version to force clean build.
GODOT_BASE_BRANCH: master
# Used to select the version of Godot to run the tests with.
GODOT_TEST_VERSION: master
# Use UTF-8 on Linux.
LANG: en_US.UTF-8
LC_ALL: en_US.UTF-8
concurrency:
group: ci-cmake-${{ github.actor }}-${{ github.head_ref || github.run_number }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-cmake:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
env:
EM_VERSION: 3.1.39
config-flags:
-DCMAKE_C_COMPILER_LAUNCHER=sccache
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
-DGODOTCPP_ENABLE_TESTING=ON
-DGODOTCPP_BUILD_PROFILE="test/build_profile.json"
SCCACHE_GHA_ENABLED: "true"
strategy:
fail-fast: false
matrix:
include:
# Linux: Standard tests with bash
- name: π§ Linux (GCC, Makefiles)
os: ubuntu-22.04
platform: linux
config-flags: -DCMAKE_BUILD_TYPE=Release
artifact-name: godot-cpp-linux-glibc2.27-x86_64-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.linux.template_release.x86_64.a
run-tests: true
godot_workflow: linux_builds.yml
godot_artifact_name: linux-editor-mono
godot_binary_path: godot.linuxbsd.editor.x86_64.mono
test_shell: bash
stable_url: https://github.com/godotengine/godot-builds/releases/download/4.5.1-stable/Godot_v4.5.1-stable_linux.x86_64.zip
stable_binary_path: Godot_v4.5.1-stable_linux.x86_64
# Windows MSVC: Tests with pwsh, .exe binary
- name: π Windows (x86_64, MSVC)
os: windows-2022
platform: windows
compiler: msvc
build-flags: --config Release
artifact-name: godot-cpp-windows-msvc2019-x86_64-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.windows.template_release.x86_64.lib
run-tests: true # Enabled: Uses PS1 script
godot_workflow: windows_builds.yml
godot_artifact_name: windows-editor-mono
godot_binary_path: godot.windows.editor.x86_64.mono.exe
test_shell: pwsh
stable_url: https://github.com/godotengine/godot-builds/releases/download/4.5.1-stable/Godot_v4.5.1-stable_win64.zip
stable_binary_path: Godot_v4.5.1-stable_win64.exe
# macOS: Tests with bash, .app path
- name: π macOS (universal, Makefiles)
os: macos-latest
platform: macos
config-flags: -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
artifact-name: godot-cpp-macos-universal-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.macos.template_release.universal.a
run-tests: true # Enabled: Quick macOS validation
godot_workflow: macos_builds.yml
godot_artifact_name: macos-editor-mono
godot_binary_path: Godot.app/Contents/MacOS/Godot # Inside .app bundle
test_shell: bash
stable_url: https://github.com/godotengine/godot-builds/releases/download/4.5.1-stable/Godot_v4.5.1-stable_macos.universal.zip
stable_binary_path: Godot_v4.5.1-stable_macos.universal/Godot.app/Contents/MacOS/Godot
# Other platforms: No tests, no godot vars (MinGW uses compiler: mingw, etc.)
- name: π Windows (x86_64, MinGW, Ninja)
os: windows-2022
platform: windows
compiler: mingw
config-flags:
-GNinja -DCMAKE_BUILD_TYPE=Release
-DCMAKE_CXX_COMPILER=cc -DCMAKE_CXX_COMPILER=c++
artifact-name: godot-cpp-linux-mingw-x86_64-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.windows.template_release.x86_64.a
run-tests: false
- name: π€ Android (arm64, Ninja)
os: ubuntu-22.04
platform: android
config-flags:
-G Ninja -DCMAKE_BUILD_TYPE=Release
--toolchain ${ANDROID_HOME}/ndk/28.1.13356709/build/cmake/android.toolchain.cmake
-DANDROID_PLATFORM=24 -DANDROID_ABI=arm64-v8a
artifact-name: godot-cpp-android-arm64-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.android.template_release.arm64.a
flags: arch=arm64
run-tests: false
- name: π iOS (arm64, XCode)
os: macos-latest
platform: ios
config-flags:
-G Xcode
--toolchain cmake/ios.toolchain.cmake
-DPLATFORM=OS64
build-flags: --config Release
artifact-name: godot-cpp-ios-arm64-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.ios.template_release.arm64.a
flags: arch=arm64
run-tests: false
- name: π Web (wasm32, Ninja)
os: ubuntu-22.04
platform: web
config-flags:
-G Ninja -DCMAKE_BUILD_TYPE=Release
--toolchain ${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
artifact-name: godot-cpp-web-wasm32-release.cmake
artifact-path: cmake-build/bin/libgodot-cpp.web.template_release.wasm32.a
run-tests: false
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.9
- name: Setup godot-cpp
uses: ./.github/actions/setup-godot-cpp
with:
platform: ${{ matrix.platform }}
windows-compiler: ${{ matrix.compiler }}
buildtool: cmake
- name: Configure godot-cpp-test with template_debug
run: >
cmake --log-level=VERBOSE -S . -B cmake-build ${{ env.config-flags }} ${{ matrix.config-flags }}
- name: Build godot-cpp-test (template_debug)
run: >
cmake --build cmake-build --verbose --target godot-cpp-test ${{ matrix.build-flags }}
- name: Configure godot-cpp-test with template_release
run: >
cmake --fresh --log-level=VERBOSE -S . -B cmake-build
-DGODOTCPP_TARGET=template_release ${{ env.config-flags }} ${{ matrix.config-flags }}
- name: Build godot-cpp-test (template_release)
run: >
cmake --build cmake-build --verbose --target godot-cpp-test ${{ matrix.build-flags }}
- name: Run sccache stat for check
shell: bash
run: ${SCCACHE_PATH} --show-stats
# Godot Download & Prep (only if run-tests: true) - Identical to SCons
- name: Download latest Godot artifacts
id: godot-download
if: matrix.run-tests && env.GODOT_TEST_VERSION == 'master'
uses: dsnopek/action-download-artifact@1322f74e2dac9feed2ee76a32d9ae1ca3b4cf4e9
with:
repo: godotengine/godot
branch: master
event: push
workflow: ${{ matrix.godot_workflow }}
workflow_conclusion: success
name: ${{ matrix.godot_artifact_name }}
search_artifacts: true
check_artifacts: true
ensure_latest: true
path: godot-artifacts
if_no_artifact_found: warn
continue-on-error: true
- name: Download stable Godot (fallback or non-master)
id: godot-fallback
if: |
matrix.run-tests &&
(
(env.GODOT_TEST_VERSION == 'master' && steps.godot-download.outcome != 'success') ||
env.GODOT_TEST_VERSION != 'master'
)
shell: ${{ matrix.test_shell }}
run: |
curl -L -o Godot.zip "${{ matrix.stable_url }}"
unzip -q Godot.zip
echo "GODOT=$(pwd)/${{ matrix.stable_binary_path }}" >> $GITHUB_ENV
- name: Prepare Godot binary from artifacts
if: matrix.run-tests && env.GODOT_TEST_VERSION == 'master' && steps.godot-download.outcome == 'success'
shell: ${{ matrix.test_shell }}
run: |
if [ "${{ matrix.platform }}" != "windows" ]; then
chmod +x "./godot-artifacts/${{ matrix.godot_binary_path }}"
fi
echo "GODOT=$(pwd)/godot-artifacts/${{ matrix.godot_binary_path }}" >> $GITHUB_ENV
- name: Verify Godot binary
if: matrix.run-tests
shell: ${{ matrix.test_shell }}
run: $GODOT --headless --version
- name: Prep project import
if: matrix.run-tests
shell: ${{ matrix.test_shell }}
run: |
cd test/project
timeout 30 $GODOT --import --headless || true
- name: Run unit tests
if: matrix.run-tests
shell: ${{ matrix.test_shell }}
working-directory: test
run: |
if [ "${{ matrix.test_shell }}" = "pwsh" ]; then
pwsh -File ./run-tests.ps1 --unit-only
else
./run-tests.sh --unit-only
fi
- name: Run reload test
if: matrix.run-tests
shell: ${{ matrix.test_shell }}
working-directory: test
run: |
rm -f project/test_reload_lock
if [ "${{ matrix.test_shell }}" = "pwsh" ]; then
pwsh -File ./run-tests.ps1 --reload-only
else
./run-tests.sh --reload-only
fi
rm -f project/test_reload_lock
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact-name }}
path: ${{ matrix.artifact-path }}
if-no-files-found: error