Build and Test #1613
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
name: 'Build and Test' | |
on: | |
push: | |
schedule: # Build and test daily. | |
- cron: 0 11 * * * | |
env: | |
# Caches should be automatically invalidated when versions change, | |
# but invalidation can be forced by incrementing these numbers. | |
EMSCRIPTEN_CACHE_VERSION: 1 | |
EXPORT_TEMPLATE_CACHE_VERSION: 1 | |
GODOT_CACHE_VERSION: 1 | |
jobs: | |
build_docker: | |
name: 'Build Docker (linux, ${{ matrix.target }}, ${{ matrix.bits }})' | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
target: [ release, debug ] | |
bits: [ 64, 32 ] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Cache submodules | |
uses: ./.github/actions/cache-submodules | |
id: cache-submodules | |
with: | |
platform: linux | |
target: ${{ matrix.target }} | |
bits: ${{ matrix.bits }} | |
- name: Pull docker images | |
run: docker-compose pull | |
working-directory: addons/godot_xterm/native | |
- name: Cache docker image layers | |
uses: jpribyl/[email protected] | |
continue-on-error: true | |
- name: Build godot-cpp bindings | |
if: steps.cache-submodules.outputs.cache-hit != 'true' | |
working-directory: addons/godot_xterm/native | |
run: | | |
docker-compose build godot-cpp-linux | |
UID_GID="$(id -u):$(id -g)" docker-compose run -e TARGET=${{ matrix.target }} -e BITS=${{ matrix.bits }} godot-cpp-linux | |
- name: Build libuv | |
if: steps.cache-submodules.outputs.cache-hit != 'true' | |
working-directory: addons/godot_xterm/native | |
run: UID_GID="$(id -u):$(id -g)" docker-compose run -e TARGET=${{ matrix.target }} -e BITS=${{ matrix.bits }} libuv-linux | |
- name: Build libgodot-xterm | |
working-directory: addons/godot_xterm/native | |
run: UID_GID="$(id -u):$(id -g)" docker-compose run -e TARGET=${{ matrix.target }} -e BITS=${{ matrix.bits }} libgodot-xterm-linux | |
- name: Upload binaries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: libgodot-xterm-${{ matrix.target }} | |
path: | | |
addons/godot_xterm/native/bin/*.so | |
build_native: | |
name: 'Build Native' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ javascript, osx, windows ] | |
target: [ release, debug ] | |
bits: [ 64, 32 ] | |
include: | |
- platform: javascript | |
os: ubuntu-22.04 | |
- platform: osx | |
os: macos-12 | |
- platform: windows | |
os: windows-2022 | |
exclude: | |
- platform: javascript | |
bits: 64 # Currently only wasm32 is supported. | |
- platform: osx | |
bits: 32 # Only 64-bit supported on macOS. | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Cache submodules | |
uses: ./.github/actions/cache-submodules | |
id: cache-submodules | |
with: | |
platform: ${{ matrix.platform }} | |
target: ${{ matrix.target }} | |
bits: ${{ matrix.bits }} | |
- name: Cache emscripten | |
if: ${{ matrix.platform == 'javascript' }} | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-emscripten | |
with: | |
path: addons/godot_xterm/native/.emcache | |
key: emsdk-cache-${{ matrix.target }}-v${{ env.EMSCRIPTEN_CACHE_VERSION }} | |
- name: Install javascript build dependencies | |
if: ${{ matrix.platform == 'javascript' }} | |
# Previously mymindstorm/setup-emsdk@v11, but hasn't been updated to Node.js 16. | |
# Should be able to switch back once it has. | |
uses: jeetiss/setup-emsdk@fafd6dd1fc20488845d49b760fd143dfcd7f133c | |
with: | |
version: 3.1.14 | |
actions-cache-folder: emsdk-cache-${{ matrix.target }} | |
- name: Install additional javascript build dependencies | |
if: ${{ matrix.platform == 'javascript' }} | |
run: sudo apt-get update && sudo apt-get install -y scons gcc-multilib g++-multilib | |
- name: Install additional macos build dependencies | |
if: ${{ matrix.os == 'macos-12' }} | |
run: brew install scons | |
- name: Install additional windows build dependencies | |
if: ${{ matrix.os == 'windows-2022' }} | |
run: python -m pip install scons | |
- name: Setup MSVC command prompt | |
uses: ilammy/msvc-dev-cmd@v1 | |
if: ${{ matrix.os == 'windows-2022' }} | |
with: | |
arch: win${{ matrix.bits }} | |
- name: Build godot-cpp bindings | |
if: steps.cache-submodules.outputs.cache-hit != 'true' | |
run: | | |
cd addons/godot_xterm/native/thirdparty/godot-cpp | |
scons platform=${{ matrix.platform }} target=${{ matrix.target }} bits=${{ matrix.bits }} generate_bindings=yes -j2 | |
- name: Setup cmake | |
if: steps.cache-submodules.outputs.cache-hit != 'true' | |
uses: jwlawson/actions-setup-cmake@v1 | |
with: | |
cmake-version: '3.23.2' | |
use-32bit: ${{ matrix.bits == 32 && matrix.os == 'windows-2022' }} | |
- name: Build libuv | |
if: steps.cache-submodules.outputs.cache-hit != 'true' | |
shell: bash | |
env: | |
TARGET: ${{ matrix.target }} | |
BITS: ${{ matrix.bits }} | |
OS: ${{ matrix.os }} | |
run: | | |
cd addons/godot_xterm/native/thirdparty/libuv | |
args="-DCMAKE_BUILD_TYPE=$TARGET -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ | |
-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64" | |
if [ "$TARGET" == "release" ]; then | |
args="$args -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL" | |
else | |
args="$args -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL" | |
fi | |
if [ "$BITS" -eq 32 -a "$OS" == "windows-2022" ]; then | |
cmake -G "Visual Studio 17 2022" -A Win32 -S $(pwd) -B "build" $args | |
else | |
mkdir build || true | |
cd build | |
if [ "$BITS" -eq 32 ]; then args="$args -DCMAKE_SYSTEM_PROCESSOR=i686 -DCMAKE_C_FLAGS=-m32"; fi | |
cmake .. $args | |
cd .. | |
fi | |
cmake --build build --config $TARGET | |
- name: Build libgodot-xterm | |
run: | | |
cd addons/godot_xterm/native | |
scons platform=${{ matrix.platform }} target=${{ matrix.target }} bits=${{ matrix.bits }} -j2 | |
- name: Upload binaries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: libgodot-xterm-${{ matrix.target }} | |
path: | | |
addons/godot_xterm/native/bin/*.wasm | |
addons/godot_xterm/native/bin/*.dylib | |
addons/godot_xterm/native/bin/*.dll | |
html5_export: | |
name: 'HTML5 Export' | |
needs: [ build_docker, build_native ] | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup Godot | |
uses: lihop/setup-godot@v2 | |
with: | |
export-templates: true | |
- name: Install binary build artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: libgodot-xterm-release | |
path: addons/godot_xterm/native/bin | |
- name: Import assets | |
uses: nick-fields/retry@v2 | |
with: | |
command: godot --editor .github/import_assets.tscn | |
retry_on: error | |
timeout_minutes: 5 | |
max_attempts: 6 | |
- name: Export HTML5 | |
uses: nick-fields/retry@v2 | |
with: | |
command: godot --no-window --export HTML5 | |
retry_on: error | |
timeout_minutes: 5 | |
max_attempts: 6 | |
- name: NPM cache | |
uses: actions/setup-node@v3 | |
with: | |
cache: 'npm' | |
cache-dependency-path: test/html5/package-lock.json | |
- name: Smoke test HTML5 export | |
shell: bash | |
working-directory: test/html5 | |
run: | | |
npm ci | |
npx serve ../../docs/demo -p 3000 & | |
npx cypress run | |
- name: Upload cypress artifacts (on failure) | |
uses: actions/upload-artifact@v3 | |
if: ${{ failure() }} | |
with: | |
name: cypress-artifacts | |
path: |- | |
test/html5/cypress/screenshots | |
test/html5/cypress/videos | |
- name: Upload export | |
uses: actions/upload-artifact@v3 | |
with: | |
name: html5-demo | |
path: docs/demo | |
test: | |
name: 'Test' | |
needs: [ build_docker, build_native ] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ windows-2022, macos-12, ubuntu-22.04 ] | |
bits: [ 64, 32 ] | |
godot_version: [ 'v3.4.5-stable', 'v3.5-stable' ] | |
exclude: | |
- os: macos-12 | |
bits: 32 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup Godot | |
uses: lihop/setup-godot@v2 | |
with: | |
version: ${{ matrix.godot_version }} | |
bits: ${{ matrix.bits }} | |
- name: Install binary build artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: libgodot-xterm-release | |
path: addons/godot_xterm/native/bin | |
- name: Run tests | |
uses: nick-fields/retry@v2 | |
with: | |
shell: bash | |
command: godot --no-window -s addons/gut/gut_cmdln.gd -gconfig=test/.gutconfig.ci.json | |
retry_on: error | |
timeout_minutes: 5 | |
max_attempts: 6 | |
- name: Run unix tests | |
if: ${{ matrix.os != 'windows-2022' }} | |
uses: nick-fields/retry@v2 | |
with: | |
command: godot --no-window -s addons/gut/gut_cmdln.gd -gconfig=test/.gutconfig.unix.json | |
retry_on: error | |
timeout_minutes: 5 | |
max_attempts: 6 | |
# Git archive should only include addons/godot_xterm directory. | |
check-archive: | |
name: 'Check Archive' | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Create git archive | |
run: git archive -o archive.zip HEAD | |
- name: Extract archive | |
run: mkdir -p /tmp/unzipped && unzip archive.zip -d /tmp/unzipped | |
- name: Check that archive only contains addons directory | |
run: | | |
shopt -s nullglob dotglob | |
ls -lR /tmp/unzipped | |
files=(/tmp/unzipped/*) | |
if [ ${#files[@]} -ne 1 ]; then | |
echo "Wrong number of files in archive (${#files[@]}) expected 1." | |
exit 1 | |
fi | |
if [ ! -d "/tmp/unzipped/addons" ]; then | |
echo "Expected directory (addons) not found." | |
exit 1 | |
fi | |
files=(/tmp/unzipped/addons) | |
if [ ${#files[@]} -ne 1 ]; then | |
echo "Wrong number of files in addons directory (${#files[@]}) expected 1." | |
exit 1 | |
fi | |
if [ ! -d "/tmp/unzipped/addons/godot_xterm" ]; then | |
echo "Expected directory (addons/godot_xterm) not found." | |
exit 1 | |
fi | |
check-code-format: | |
name: 'Check Code Format' | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.x | |
- name: GDFormat Check | |
run: | | |
python -m pip install -r requirements.txt | |
gdformat -c . |