Skip to content

CI: test export with GDExtension (#66) #223

CI: test export with GDExtension (#66)

CI: test export with GDExtension (#66) #223

Workflow file for this run

name: 🦕 C++ GDExtension
on:
push:
branches: "*"
tags: v*
env:
vcpkg_tag: 943c5ef1c8f6b5e6ced092b242c8299caae2ff01 # 2024.04.26
jobs:
windows:
name: 🪟Windows
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Python 3.x
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install tools
run: |
python -m pip install scons
scons --version
pip install ply
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.vcpkg_tag }}
- uses: actions/cache@v4
id: cache-godot-cpp
if: github.ref_type != 'tag'
with:
path: |
gdext/scons_cache
key: godot-cpp-${{ runner.os }}-${{ hashFiles('gdext/godot-cpp/gdextension/extension_api.json') }}
- name: Build
if: github.ref_type != 'tag'
run: |
cd gdext
scons godot-cpp
scons
scons target=template_release godot-cpp
scons target=template_release
- name: Build (with debug symbols)
if: github.ref_type == 'tag'
run: |
cd gdext
scons debug_symbols=yes godot-cpp
scons debug_symbols=yes
scons debug_symbols=yes target=template_release godot-cpp
scons debug_symbols=yes target=template_release
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: gdext-windows
path: addons/imgui-godot/bin
linux:
name: 🐧Linux
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Python 3.x
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install tools
run: |
python -m pip install scons
scons --version
pip install ply
sudo apt install clang-format
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.vcpkg_tag }}
- uses: actions/cache@v4
id: cache-godot-cpp
with:
path: |
gdext/scons_cache
key: godot-cpp-${{ runner.os }}-${{ hashFiles('gdext/godot-cpp/gdextension/extension_api.json') }}
- name: Build debug
run: |
cd gdext
scons godot-cpp
scons
- name: Build release
run: |
cd gdext
scons target=template_release godot-cpp
scons target=template_release
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: gdext-linux
path: addons/imgui-godot/bin
macos:
name: 🍎macOS
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Python 3.x
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install tools
run: |
python -m pip install scons
scons --version
pip install ply
brew install clang-format ninja
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.vcpkg_tag }}
- uses: actions/cache@v4
id: cache-godot-cpp
with:
path: |
gdext/scons_cache
key: godot-cpp-${{ runner.os }}-${{ hashFiles('gdext/godot-cpp/gdextension/extension_api.json') }}
- name: Build debug
run: |
export PATH="$(brew --prefix llvm@15)/bin:$PATH"
cd gdext
scons godot-cpp
scons
- name: Build release
run: |
export PATH="$(brew --prefix llvm@15)/bin:$PATH"
cd gdext
scons target=template_release godot-cpp
scons target=template_release
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: gdext-macos
path: addons/imgui-godot/bin
package:
name: 📦Package
runs-on: ubuntu-latest
needs: [windows, linux, macos]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/download-artifact@v4
with:
path: addons/imgui-godot/bin
pattern: gdext-*
- run: ls -R
working-directory: addons/imgui-godot/bin
- name: Extract
run: |
cd addons/imgui-godot/bin
mv gdext-*/* .
rmdir gdext-*
rm *.exp
rm *.lib
- name: Upload PDBs
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: pdbs
path: addons/imgui-godot/bin/*.pdb
- name: Prepare files
id: prep
run: |
set -x
ls -R
rm -f addons/imgui-godot/bin/*.pdb
mkdir addons/imgui-godot/include
cp -r gdext/include/*.h addons/imgui-godot/include/
touch addons/imgui-godot/include/.gdignore
cp gdext/imgui-godot-native.gdextension addons/imgui-godot/
ls -al gdext/imgui
git -C gdext/imgui fetch --tags
git -C gdext/imgui describe > addons/imgui-godot/include/imgui-version.txt
env
imgui_ver=$(grep -m 1 "^#define IMGUI_VERSION " < gdext/imgui/imgui.h | awk '{ print $3 }' | sed 's/"//g')
plugin_ver=$(grep -m 1 "version=" < addons/imgui-godot/plugin.cfg | sed 's/version=//' | sed 's/"//g')
pkgfn=imgui-godot-${plugin_ver}_imgui-${imgui_ver}
echo $pkgfn
echo "pkgfn=$pkgfn" >> $GITHUB_OUTPUT
rm -rf gdext
pkgdir=~/out/imgui-godot-${plugin_ver}
mkdir -p $pkgdir
mv * $pkgdir
echo "pkgdir=$pkgdir" >> $GITHUB_OUTPUT
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: ${{ steps.prep.outputs.pkgfn }}
path: |
~/out
- name: Prep asset
working-directory: ${{ steps.prep.outputs.pkgdir }}
run: |
rm * || true
rm -r data doc src
- name: Upload asset package
uses: actions/upload-artifact@v4
with:
name: AssetLib-${{ steps.prep.outputs.pkgfn }}
path: ~/out
package_cs:
name: 📦Package (C# only)
runs-on: ubuntu-latest
needs: [windows, linux, macos]
steps:
- uses: actions/checkout@v4
- name: Prepare files
id: prep_cs
run: |
ls -R
rm -rf doc/examples
rm -rf gdext
plugin_ver=$(grep -m 1 "version=" < addons/imgui-godot/plugin.cfg | sed 's/version=//' | sed 's/"//g')
pkgfn=imgui-godot-${plugin_ver}-csharp-only
echo $pkgfn
echo "pkgfn=$pkgfn" >> $GITHUB_OUTPUT
pkgdir=~/out/imgui-godot-${plugin_ver}
mkdir -p $pkgdir
mv * $pkgdir
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: ${{ steps.prep_cs.outputs.pkgfn }}
path: ~/out
export_linux:
name: 🐧Export
runs-on: ubuntu-latest
needs: [package]
strategy:
matrix:
gdver: ["4.2.2", "4.3.0-beta.1"]
include:
- gdver: "4.2.2"
gdver_full: 4.2.2.stable
templates_url: https://github.com/godotengine/godot/releases/download/4.2.2-stable/Godot_v4.2.2-stable_export_templates.tpz
- gdver: "4.3.0-beta.1"
gdver_full: 4.3.beta1
templates_url: https://github.com/godotengine/godot-builds/releases/download/4.3-beta1/Godot_v4.3-beta1_export_templates.tpz
steps:
- uses: actions/download-artifact@v4
with:
pattern: imgui-godot-*_imgui*
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Download Godot
run: |
dotnet tool install --global Chickensoft.GodotEnv
godotenv godot install ${{ matrix.gdver }} --no-dotnet
echo "GODOT=$(godotenv godot env path)" >> $GITHUB_ENV
- name: Download export templates
run: |
mkdir -p ~/.local/share/godot/export_templates
cd ~/.local/share/godot/export_templates
wget -q ${{ matrix.templates_url }}
unzip *.tpz
rm *.tpz
mv templates ${{ matrix.gdver_full }}
- name: Prep
run: |
cd imgui-godot-*
cd imgui-godot-*
ls -R
cd doc/examples/GdsGameProject
mkdir ../export
godotenv addons install
timeout 10 $GODOT --headless --import || true
$GODOT --headless --import
echo "GAMEDIR=$(pwd)" >> $GITHUB_ENV
- name: Export Debug
run: |
cd $GAMEDIR
$GODOT --headless --export-debug Linux
cd ../export
./GdsGameProject.x86_64 --headless --quit-after 10
rm -rf *
- name: Export Release
run: |
cd $GAMEDIR
$GODOT --headless --export-release Linux
cd ../export
./GdsGameProject.x86_64 --headless --quit-after 10