ccache builds #83
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
name: Continuous integration | |
on: [push, pull_request] | |
env: | |
# Only used for the cache key. Increment version to force clean build. | |
GODOT_BASE_BRANCH: master | |
concurrency: | |
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: "${{ matrix.platforms.name }} (${{ matrix.builder.name }}, ${{matrix.platforms.description}})" | |
runs-on: ${{ matrix.platforms.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
exclude: | |
- builder: | |
name: CMake | |
platforms: | |
name: π iOS | |
builder: | |
- name: SCons | |
generate_sources: | | |
scons {0} build_library=no verbose=yes | |
scons -c | |
build_godot_cpp_debug: | | |
scons {0} target=template_debug verbose=yes | |
build_debug: | | |
cd test | |
scons {0} target=template_debug build_library=no verbose=yes | |
build_release: | | |
cd test | |
scons {0} target=template_release verbose=yes | |
- name: CMake | |
generate_sources: | | |
cmake {0} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache -B build test | |
build_godot_cpp_debug: | | |
cmake --build build --config Debug --target godot-cpp | |
build_debug: | | |
cmake --build build --config Debug | |
build_release: | | |
cmake {0} -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DTARGET=TEMPLATE_RELEASE -B build_release test | |
cmake --build build_release --config Release | |
platforms: | |
- name: π§ Linux | |
description: 'GCC' | |
os: ubuntu-20.04 | |
platform: linux | |
artifact-name: godot-cpp-linux-glibc2.27-x86_64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.linux.template_release.x86_64.a | |
CMake: build_release/godot-cpp/bin/libgodot-cpp.linux.template_release.x86_64.a | |
flags: | |
SCons: platform=linux | |
CMake: -G Ninja | |
run-tests: true | |
cache-name: linux-x86_64 | |
- name: π§ Linux | |
description: 'GCC, Double Precision' | |
os: ubuntu-20.04 | |
platform: linux | |
artifact-name: godot-cpp-linux-glibc2.27-x86_64-double-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.linux.template_release.double.x86_64.a | |
CMake: build_release/godot-cpp/bin/libgodot-cpp.linux.template_release.double.x86_64.a | |
flags: | |
SCons: platform=linux precision=double | |
CMake: -G Ninja -DFLOAT_PRECISION=DOUBLE | |
run-tests: false | |
cache-name: linux-x86_64-f64 | |
- name: π Windows | |
description: 'x86_64, MSVC' | |
os: windows-2019 | |
platform: windows | |
artifact-name: godot-cpp-windows-msvc2019-x86_64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.windows.template_release.x86_64.lib | |
CMake: build_release/Release/gdexample.windows.template_release.x86_64.lib | |
flags: | |
Scons: platform=windows | |
CMake: '-G "Visual Studio 16 2019" -A x64' | |
run-tests: false | |
cache-name: windows-x86_64-msvc | |
- name: π Windows | |
description: 'x86_64, MinGW' | |
os: windows-2019 | |
platform: windows | |
artifact-name: godot-cpp-linux-mingw-x86_64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.windows.template_release.x86_64.a | |
CMake: build_release/godot-cpp/bin/libgodot-cpp.windows.template_release.x86_64.a | |
flags: | |
SCons: platform=windows use_mingw=yes | |
CMake: -G Ninja | |
use-mingw: true | |
run-tests: false | |
cache-name: windows-x86_64-mingw | |
- name: π macOS | |
description: 'universal' | |
os: macos-11 | |
platform: macos | |
artifact-name: godot-cpp-macos-universal-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.macos.template_release.universal.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.macos.template_release.a | |
flags: | |
SCons: platform=macos arch=universal | |
CMake: -G Xcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO | |
run-tests: false | |
cache-name: macos-universal | |
- name: π€ Android | |
description: 'arm64' | |
os: ubuntu-20.04 | |
platform: android | |
artifact-name: godot-cpp-android-arm64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.android.template_release.arm64.a | |
CMake: build_release/godot-cpp/bin/libgodot-cpp.android.template_release.arm64.a | |
flags: | |
SCons: platform=android arch=arm64 | |
CMake: --toolchain ${ANDROID_HOME}/ndk/23.2.8568313/build/cmake/android.toolchain.cmake -G Ninja -DANDROID_PLATFORM=21 | |
run-tests: false | |
cache-name: android-arm64 | |
- name: π iOS | |
description: 'arm64' | |
os: macos-11 | |
platform: ios | |
artifact-name: godot-cpp-ios-arm64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.ios.template_release.arm64.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.ios.template_release.a | |
flags: | |
SCons: platform=ios arch=arm64 | |
CMake: -G Xcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO | |
run-tests: false | |
cache-name: ios-arm64 | |
- name: π Web | |
description: 'wasm32' | |
os: ubuntu-20.04 | |
platform: web | |
artifact-name: godot-cpp-web-wasm32-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.web.template_release.wasm32.a | |
CMake: build_release/godot-cpp/bin/libgodot-cpp.web.template_release.wasm32.a | |
flags: | |
SCons: platform=web | |
CMake: --toolchain ${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -G Ninja | |
run-tests: false | |
cache-name: web-wasm32 | |
env: | |
SCONS_CACHE: ${{ github.workspace }}/.scons-cache/ | |
EM_VERSION: 3.1.39 | |
EM_CACHE_FOLDER: "emsdk-cache" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Godot build cache | |
uses: ./.github/actions/godot-cache | |
with: | |
cache-name: ${{ matrix.platforms.cache-name }} | |
continue-on-error: true | |
- name: Set up Python (for SCons) | |
if: ${{ matrix.builder.name == 'SCons' }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Android dependencies | |
if: ${{ matrix.platforms.platform == 'android' }} | |
uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r23c | |
link-to-sdk: true | |
- name: Web dependencies | |
if: ${{ matrix.platforms.platform == 'web' }} | |
uses: mymindstorm/setup-emsdk@v14 | |
with: | |
version: ${{env.EM_VERSION}} | |
actions-cache-folder: ${{env.EM_CACHE_FOLDER}} | |
- name: Install scons | |
if: ${{ matrix.builder.name == 'SCons' }} | |
run: | | |
python -m pip install scons==4.0.0 | |
- name: Install CMake | |
if: ${{ matrix.builder.name == 'CMake' }} | |
uses: ssrobins/install-cmake@v1 | |
- name: Install ccache | |
if: ${{ matrix.builder.name == 'CMake' }} | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: ${{ matrix.platforms.cache-name }} | |
- name: Install Ninja | |
if: ${{ matrix.builder.name == 'CMake' }} | |
uses: ashutoshvarma/setup-ninja@master | |
- name: '[TEMP] (CMake Mac) remove preexisting files' | |
if: ${{ matrix.builder.name == 'CMake' && (matrix.platforms.platform == 'macos' || matrix.platforms.platform == 'ios') }} | |
uses: JesseTG/[email protected] | |
with: | |
path: test/project/bin | |
- name: Generate godot-cpp sources only | |
run: ${{ format(matrix.builder.generate_sources, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Build godot-cpp (debug) | |
run: ${{ format(matrix.builder.build_godot_cpp_debug, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Build test without rebuilding godot-cpp (debug) | |
run: ${{ format(matrix.builder.build_debug, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Build test and godot-cpp (release) | |
run: ${{ format(matrix.builder.build_release, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Download latest Godot artifacts | |
uses: dsnopek/action-download-artifact@1322f74e2dac9feed2ee76a32d9ae1ca3b4cf4e9 | |
if: ${{ matrix.platforms.run-tests }} | |
with: | |
repo: godotengine/godot | |
branch: master | |
event: push | |
workflow: linux_builds.yml | |
workflow_conclusion: success | |
name: linux-editor-mono | |
search_artifacts: true | |
check_artifacts: true | |
ensure_latest: true | |
path: godot-artifacts | |
- name: Run tests | |
if: ${{ matrix.platforms.run-tests }} | |
run: | | |
chmod +x ./godot-artifacts/godot.linuxbsd.editor.x86_64.mono | |
./godot-artifacts/godot.linuxbsd.editor.x86_64.mono --headless --version | |
cd test | |
# Need to run the editor so .godot is generated... but it crashes! Ignore that :-) | |
(cd project && (timeout 10 ../../godot-artifacts/godot.linuxbsd.editor.x86_64.mono --editor --headless --quit >/dev/null 2>&1 || true)) | |
GODOT=../godot-artifacts/godot.linuxbsd.editor.x86_64.mono ./run-tests.sh | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.platforms.artifact-name }}-${{ matrix.builder.name }} | |
path: ${{ matrix.platforms.artifact-path[matrix.builder.name] }} | |
if-no-files-found: error | |