Skip to content

CI: use better cache key #327

CI: use better cache key

CI: use better cache key #327

Workflow file for this run

name: 🦕 C++ GDExtension
on:
push:
branches: "*"
tags: v*
env:
vcpkg_tag: 1de2026f28ead93ff1773e6e680387643e914ea1 # 2024.07.12
jobs:
# TODO: refactor to matrix
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 }}
- shell: bash
run: |
echo "cache_key=godot-cpp-$(git -C gdext/godot-cpp rev-parse --short HEAD)-${{ runner.os }}-$ImageVersion" >> $GITHUB_ENV
- uses: actions/cache@v4
id: cache-godot-cpp
if: github.ref_type != 'tag'
with:
path: |
gdext/scons_cache
key: ${{ env.cache_key }}
- 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 }}
- shell: bash
run: |
echo "cache_key=godot-cpp-$(git -C gdext/godot-cpp rev-parse --short HEAD)-${{ runner.os }}-$ImageVersion" >> $GITHUB_ENV
- uses: actions/cache@v4
id: cache-godot-cpp
with:
path: |
gdext/scons_cache
key: ${{ env.cache_key }}
- 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 }}
- shell: bash
run: |
echo "cache_key=godot-cpp-$(git -C gdext/godot-cpp rev-parse --short HEAD)-${{ runner.os }}-$ImageVersion" >> $GITHUB_ENV
- uses: actions/cache@v4
id: cache-godot-cpp
with:
path: |
gdext/scons_cache
key: ${{ env.cache_key }}
- 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-rc.2"]
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-rc.2"]
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-rc.2"]
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 }}