Update godot-cpp to the Godot 4.3-beta2 version #478
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
# Workflow to automatically create the godot openxr loaders addon | |
name: Build on push | |
on: [push, pull_request] | |
jobs: | |
build: | |
name: Building for ${{ matrix.name }} (${{ matrix.os }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- name: Linux (x86_64) | |
os: ubuntu-20.04 | |
platform: linux | |
flags: arch=x86_64 | |
artifact_name: build-files-linux-x86_64 | |
artifact_path: aar/demo/addons/godotopenxrvendors/.bin/linux/*/*/*.so | |
# Not sure how to cross compile these | |
# - name: Linux (arm64) | |
# os: ubuntu-20.04 | |
# platform: linux | |
# flags: arch=arm64 | |
# artifact_name: build-files-linux-arm64 | |
# artifact_path: aar/demo/addons/godotopenxrvendors/.bin/linux/*/*/*.so | |
# - name: Linux (rv64) | |
# os: ubuntu-20.04 | |
# platform: linux | |
# flags: arch=rv64 | |
# artifact_name: build-files-linux-rv64 | |
# artifact_path: aar/demo/addons/godotopenxrvendors/.bin/linux/*/*/*.so | |
- name: Windows | |
os: windows-latest | |
platform: windows | |
artifact_name: build-files-windows | |
artifact_path: aar/demo/addons/godotopenxrvendors/.bin/windows/*/*/*.dll | |
- name: MacOS | |
os: macos-latest | |
platform: macos | |
flags: arch=universal | |
artifact_name: build-files-macos | |
artifact_path: aar/demo/addons/godotopenxrvendors/.bin/macos/*/*.framework | |
- name: Android AAR | |
os: ubuntu-20.04 | |
platform: android | |
flags: arch=arm64 | |
artifact_name: build-files-android-aar | |
artifact_path: aar/demo/addons/godotopenxrvendors/.bin/android/*/*.aar | |
- name: Android SO | |
os: ubuntu-20.04 | |
platform: android | |
flags: arch=arm64 | |
artifact_name: build-files-android-so | |
artifact_path: aar/demo/addons/godotopenxrvendors/.bin/android/*/*/*.so | |
# Note, to satisfy the asset library we need to make sure our zip files have a root folder | |
# this is why we checkout into aar and build into asset | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: aar | |
submodules: recursive | |
- name: Set up Python (for SCons) | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.x" | |
- name: Android dependencies | |
uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r23c | |
link-to-sdk: true | |
- name: Install scons | |
run: | | |
python -m pip install scons==4.0.0 | |
- name: Create extension library | |
run: | | |
cd aar | |
scons platform=${{ matrix.platform }} target=template_debug ${{ matrix.flags }} custom_api_file=thirdparty/godot_cpp_gdextension_api/extension_api.json | |
scons platform=${{ matrix.platform }} target=template_release ${{ matrix.flags }} custom_api_file=thirdparty/godot_cpp_gdextension_api/extension_api.json | |
cd .. | |
# On Android we build our loaders and build our extension with gradlew | |
- name: Setup java | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 17 | |
distribution: "adopt" | |
if: matrix.platform == 'android' | |
- name: Validate Gradle wrapper | |
uses: gradle/wrapper-validation-action@v1 | |
if: matrix.platform == 'android' | |
- name: Create Godot-CPP library | |
run: | | |
cd aar/thirdparty/godot-cpp | |
scons platform=${{ matrix.platform }} target=template_debug arch=arm64 custom_api_file=../godot_cpp_gdextension_api/extension_api.json | |
scons platform=${{ matrix.platform }} target=template_release arch=arm64 custom_api_file=../godot_cpp_gdextension_api/extension_api.json | |
scons platform=${{ matrix.platform }} target=template_debug arch=x86_64 custom_api_file=../godot_cpp_gdextension_api/extension_api.json | |
scons platform=${{ matrix.platform }} target=template_release arch=x86_64 custom_api_file=../godot_cpp_gdextension_api/extension_api.json | |
cd ../../.. | |
if: matrix.platform == 'android' | |
- name: Create Godot OpenXR Vendors AARs | |
run: | | |
cd aar | |
./gradlew build | |
cd .. | |
if: matrix.platform == 'android' | |
- name: Upload build files (artifacts) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.artifact_name }} | |
path: | | |
${{ matrix.artifact_path }} | |
# GODOT 4.2 ADDON GENERATION SECTION | |
asset: | |
name: Assembling the asset | |
runs-on: ubuntu-20.04 | |
needs: build | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: aar | |
- name: Download all workflow run artifacts | |
uses: actions/download-artifact@v3 | |
- name: Create Godot OpenXR Vendors Addon | |
run: | | |
mkdir asset | |
cp -r aar/demo/addons asset | |
cp aar/CHANGES.md asset/addons/godotopenxrvendors/GodotOpenXRVendors_CHANGES.md | |
- name: Adding vendor licences | |
run: | | |
mkdir -p asset/addons/godotopenxrvendors/meta/ | |
cp aar/thirdparty/ovr_openxr_mobile_sdk/LICENSE.txt asset/addons/godotopenxrvendors/meta/ | |
mkdir -p asset/addons/godotopenxrvendors/pico/ | |
cp aar/thirdparty/pico_openxr_sdk/README.md asset/addons/godotopenxrvendors/pico/LICENSE.md | |
mkdir -p asset/addons/godotopenxrvendors/khronos/ | |
cp aar/thirdparty/khronos_openxr_sdk/LICENSE asset/addons/godotopenxrvendors/khronos/LICENSE | |
- name: Copying artifacts | |
run: | | |
mkdir -p asset/addons/godotopenxrvendors/.bin/android/ | |
cp -r build-files-android-aar/* asset/addons/godotopenxrvendors/.bin/android/ | |
cp -r build-files-android-so/* asset/addons/godotopenxrvendors/.bin/android/ | |
mkdir -p asset/addons/godotopenxrvendors/.bin/linux/ | |
cp -r build-files-linux-x86_64/* asset/addons/godotopenxrvendors/.bin/linux/ | |
mkdir -p asset/addons/godotopenxrvendors/.bin/windows/ | |
cp -r build-files-windows/* asset/addons/godotopenxrvendors/.bin/windows/ | |
mkdir -p asset/addons/godotopenxrvendors/.bin/macos/ | |
cp -r build-files-macos/* asset/addons/godotopenxrvendors/.bin/macos/ | |
- name: Create Godot OpenXR Vendor addon artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: GodotOpenXRVendorsAddon | |
path: | | |
asset | |
- name: Zip addon | |
run: | | |
zip -qq -r godotopenxrvendorsaddon.zip asset | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
- name: Create and upload asset | |
uses: ncipollo/release-action@v1 | |
with: | |
allowUpdates: true | |
artifacts: "godotopenxrvendorsaddon.zip" | |
omitNameDuringUpdate: true | |
omitBodyDuringUpdate: true | |
omitDraftDuringUpdate: true | |
omitPrereleaseDuringUpdate: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
run_xr_simulator: | |
name: "Run XR Simulator" | |
#runs-on: windows-latest | |
runs-on: [Windows, self-hosted, gpu] | |
needs: build | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Install Chocolatey | |
run: | | |
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) | |
- name: Install 7zip | |
run: | | |
choco install 7zip -y | |
- name: Download Godot | |
run: | | |
# @todo Download an actual Godot build! | |
Invoke-WebRequest -Uri "https://github.com/godotengine/godot-builds/releases/download/4.3-beta2/Godot_v4.3-beta2_win64.exe.zip" -OutFile "godot.zip" | |
- name: Extract Godot | |
run: | | |
Expand-Archive -Path "godot.zip" -DestinationPath . | |
#- name: Download SwiftShader vulkan-1.dll | |
# run: | | |
# Invoke-WebRequest -Uri "https://www.dropbox.com/scl/fi/r6radx6b125555xkxue20/vulkan-1.dll?rlkey=ffv3cgvqbytivm1zy119hss7n&st=frcettrf&dl=1" -OutFile "vulkan-1.dll" | |
- name: Download Meta XR Simulator | |
run: | | |
Invoke-WebRequest -Uri "https://npm.developer.oculus.com/com.meta.xr.simulator/-/com.meta.xr.simulator-65.0.0.tgz" -OutFile MetaXRSimulator.tgz | |
- name: Extract Meta XR Simulator | |
run: | | |
# Unzip. | |
New-Item -Path "C:\Meta" -ItemType Directory -Force | |
tar -xzvf "MetaXRSimulator.tgz" -C "C:\Meta\" | |
rm "MetaXRSimulator.tgz" | |
# Gunzip. | |
$tgzFile = Get-ChildItem -Path "C:\Meta" -Filter *.tgz | |
7z x $tgzFile.FullName -oC:\Meta -aoa | |
# Untar. | |
$tarFile = Get-ChildItem -Path "C:\Meta" -Filter *.tar | |
7z x $tarFile.FullName -oC:\Meta -aoa | |
- name: Configure the Meta XR Simulator as the active OpenXR runtime | |
run: | | |
New-Item -Path "HKLM:\SOFTWARE\Khronos\OpenXR\1" -Name "ActiveRuntime" -Force | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Khronos\OpenXR\1" -Name "ActiveRuntime" -Value "C:\Meta\package\MetaXRSimulator\meta_openxr_simulator.json" | |
- name: Download Windows build artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: build-files-windows | |
path: build-files-windows | |
- name: Copy Windows build of the addon into the demo project | |
run: | | |
mkdir -p demo/addons/godotopenxrvendors/.bin/windows/ | |
cp -r build-files-windows/* demo/addons/godotopenxrvendors/.bin/windows/ | |
- name: Import the demo project | |
run: | | |
$godot = "Godot_v4.3-beta2_win64.exe" | |
Start-Process -FilePath "$godot" -ArgumentList "--path demo --import --headless" -NoNewWindow -Wait | |
- name: Launch a synthetic environment | |
run: | | |
# Ensure a synthetic environment isn't already running. | |
try { | |
Get-Process -Name "synth_env_server" | Stop-Process | |
} catch { | |
# Do nothing if there is no existing process. | |
} | |
Start-Process -FilePath "C:\Meta\package\MetaXRSimulator\.synth_env_server\synth_env_server.exe" -ArgumentList "Bedroom" -PassThru | |
- name: Run tests | |
run: | | |
$jsonPath = "$env:AppData\MetaXR\MetaXrSimulator\persistent_data.json" | |
$vrsFiles = Get-ChildItem -Path tests/vrs -Filter *.vrs | |
foreach ($file in $vrsFiles) { | |
$replayPath = Join-Path -Path $file.DirectoryName -ChildPath ($file.BaseName + "-replay.vrs") | |
$jsonContent = @{ | |
session_capture = @{ | |
delay_start_ms = 5000 | |
exec_state = "replay" | |
quit_buffer_ms = 5000 | |
quit_when_complete = $true | |
record_path = $file.FullName | |
replay_path = $replayPath | |
} | |
} | ConvertTo-Json | |
New-Item -ItemType Directory -Force -Path (Split-Path $jsonPath) | |
Set-Content -Path $jsonPath -Value $jsonContent | |
echo "$jsonContent" | |
$godot = "Godot_v4.3-beta2_win64.exe" | |
$timeout = 300 | |
$waitTime = 0 | |
$process = Start-Process -FilePath "$godot" -ArgumentList "--path demo --rendering-method mobile --verbose -- --quit-with-openxr" -NoNewWindow -PassThru | |
while ($process.HasExited -eq $false -and $waitTime -lt $timeout) { | |
Start-Sleep -Seconds 1 | |
$waitTime++ | |
} | |
if ($process.HasExited -eq $false) { | |
Write-Output "Process is still running after $timeout seconds. Stopping the process." | |
$process.Kill() | |
Exit 1 | |
} else { | |
Write-Output "Process completed within $waitTime seconds." | |
} | |
if (-Not (Test-Path $replayPath)) { | |
Write-Error "Replay file not found: $replayPath" | |
Exit 1 | |
} | |
} | |
- name: Stop synthetic environment | |
run: | | |
Get-Process -Name "synth_env_server" | Stop-Process | |
- name: Copy vrs_pixmatch.py from Meta XR Simulator | |
run: | | |
$scriptsPath = "C:\Meta\package\MetaXRSimulator\scripts" | |
cp "$scriptsPath\requirements.txt" tests\vrs\ | |
cp "$scriptsPath\vrs_pixmatch.py" tests\vrs\ | |
- name: Upload VRS artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ReplayVRS | |
path: tests/vrs/**/* | |
compare_vrs_replay: | |
name: "Compare VRS replay" | |
runs-on: ubuntu-latest | |
needs: run_xr_simulator | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Download VRS artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: ReplayVRS | |
path: tests/vrs | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r tests/vrs/requirements.txt | |
- name: Compare VRS replay with expected recordings | |
run: | | |
cd tests/vrs/ | |
# Fix bugs in vrs_pixmatch.py script. | |
patch -p0 < ../../thirdparty/meta_xr_simulator/vrs_pixmatch.patch | |
mkdir diffs | |
for replay in *-replay.vrs; do | |
expected=$(echo $replay | sed -e 's/-replay.vrs$/.vrs/') | |
python vrs_pixmatch.py "$replay" "$expected" --threshold 0.4 --best_match_pixels_diff_threshold 40000 --diffs_output_path diffs | |
done | |
- name: Upload VRS diff artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ReplayVRSDiff | |
path: tests/vrs/diffs/**/* |