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<4.8" 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<4.8" 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<4.8" 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 gds_game: needs: [package] strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-14, windows-latest] gdver: ["4.2.2", "4.3.0-beta.3"] include: - os: ubuntu-latest name: 🐧GdsGameProject exe: GdsGameProject.x86_64 - os: macos-14 name: 🍎GdsGameProject exe: GdsGameProject.app/Contents/MacOS/GdsGameProject - os: windows-latest name: 🪟GdsGameProject exe: GdsGameProject.exe exclude: # frequently gets stuck on import despite workaround - os: windows-latest gdver: "4.2.2" name: ${{ matrix.name }} (${{ matrix.gdver }}) runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: pattern: imgui-godot-*_imgui* - uses: chickensoft-games/setup-godot@v2 with: version: ${{ matrix.gdver }} use-dotnet: false include-templates: true cache: false - name: Import uses: ./.github/actions/import with: path: doc/examples/GdsGameProject - name: Export Debug shell: bash run: | cd $GAMEDIR $GODOT --headless --export-debug $RUNNER_OS # TODO: check output for unexpected errors # Godot 4.2.2 exits with error code 1 on Mac/Win, this is fixed in 4.3 # https://github.com/godotengine/godot/pull/89229 - name: Run Debug (workaround) if: runner.os != 'Linux' && matrix.gdver == '4.2.2' shell: bash run: | cd $GAMEDIR/export ./${{ matrix.exe }} --headless --quit-after 10 || true rm -rf * - name: Run Debug if: runner.os == 'Linux' || matrix.gdver != '4.2.2' shell: bash run: | cd $GAMEDIR/export ./${{ matrix.exe }} --headless --quit-after 10 rm -rf * - name: Export Release shell: bash run: | cd $GAMEDIR $GODOT --headless --export-release $RUNNER_OS - name: Run Release (workaround) shell: bash run: | cd $GAMEDIR/export ./${{ matrix.exe }} --headless --quit-after 10 || true test_gdscript: needs: [package] strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-14, windows-latest] gdver: ["4.2.2", "4.3.0-beta.3"] include: - os: ubuntu-latest name: 🐧🧪GDScript exe: test.x86_64 - os: macos-14 name: 🍎🧪GDScript exe: test.app/Contents/MacOS/test - os: windows-latest name: 🪟🧪GDScript exe: test.exe exclude: # frequently gets stuck on import despite workaround - os: windows-latest gdver: "4.2.2" name: ${{ matrix.name }} (${{ matrix.gdver }}) runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: pattern: imgui-godot-*_imgui* - uses: chickensoft-games/setup-godot@v2 with: version: ${{ matrix.gdver }} use-dotnet: false include-templates: true cache: false - name: Import uses: ./.github/actions/import with: path: doc/test/gdscript - name: Run tests uses: ./.github/actions/run-test-project with: exe: ${{ matrix.exe }} test_csharp: needs: [package] strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-14, windows-latest] gdver: ["4.2.2", "4.3.0-beta.3"] include: - os: ubuntu-latest name: 🐧🧪C# exe: test.x86_64 - os: macos-14 name: 🍎🧪C# exe: test.app/Contents/MacOS/test - os: windows-latest name: 🪟🧪C# exe: test.exe exclude: # frequently gets stuck on import despite workaround - os: windows-latest gdver: "4.2.2" name: ${{ matrix.name }} (${{ matrix.gdver }}) runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: pattern: imgui-godot-*_imgui* - uses: chickensoft-games/setup-godot@v2 with: version: ${{ matrix.gdver }} use-dotnet: true include-templates: true cache: false - name: Import uses: ./.github/actions/import with: path: doc/test/csharp - name: Build shell: bash run: | cd $GAMEDIR dotnet build - name: Run tests uses: ./.github/actions/run-test-project with: exe: ${{ matrix.exe }}