From 2cc68b23ad765315f21e18fcf981cf2678ca9938 Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Mon, 28 Aug 2023 19:32:15 +0200 Subject: [PATCH] GHA: Add test build workflow --- .github/workflows/test.yml | 230 +++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..868e34b --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,230 @@ +name: 🔧 Test builds +on: + workflow_call: + inputs: + godot-treeish: + description: A tag, branch or commit hash in the Godot repository. + type: string + default: master + limboai-treeish: + description: A tag, branch or commit hash in the LimboAI repository. + type: string + default: master + + workflow_dispatch: + inputs: + godot-treeish: + description: A tag, branch or commit hash in the Godot repository. + type: string + default: master + limboai-treeish: + description: A tag, branch or commit hash in the LimboAI repository. + type: string + default: master + +# Global Settings +env: + SCONS_CACHE_MSVC_CONFIG: true + SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: production=yes tests=no verbose=yes warnings=extra werror=yes + DOTNET_NOLOGO: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + +jobs: + linux-test-build: + runs-on: "ubuntu-20.04" + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Editor (x86_64, release) + target: editor + arch: x86_64 + build-mono: false + + - name: Template (x86_64, release) + target: template_release + arch: x86_64 + build-mono: false + + - name: Template (x86_64, debug) + target: template_debug + arch: x86_64 + build-mono: false + + env: + BIN: godot.linuxbsd.${{matrix.target}}.${{matrix.arch}}${{ matrix.build-mono == true && '.mono' || '' }} + + steps: + - name: Clone Godot + uses: actions/checkout@v3 + with: + repository: godotengine/godot + ref: ${{ inputs.godot-treeish }} + + - name: Clone LimboAI module + uses: actions/checkout@v3 + with: + path: modules/limboai + ref: ${{ inputs.limboai-treeish }} + + # Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables. + - uses: ./modules/limboai/.github/actions/init-version + + # About sed see: https://github.com/godotengine/buildroot/issues/6 + - name: Set up buildroot x86_64 + if: matrix.arch == 'x86_64' + run: | + wget https://download.tuxfamily.org/godotengine/toolchains/linux/x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2 + tar -xjf x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2 + mv x86_64-godot-linux-gnu_sdk-buildroot buildroot + cd buildroot + sed -i x86_64-godot-linux-gnu/sysroot/usr/lib/pkgconfig/dbus-1.pc -e "s@/lib@/lib64@g" + ./relocate-sdk.sh + cd .. + + - name: Set up buildroot x86_32 + if: matrix.arch == 'x86_32' + run: | + wget https://download.tuxfamily.org/godotengine/toolchains/linux/i686-godot-linux-gnu_sdk-buildroot.tar.bz2 + tar -xjf i686-godot-linux-gnu_sdk-buildroot.tar.bz2 + mv i686-godot-linux-gnu_sdk-buildroot buildroot + cd buildroot + ./relocate-sdk.sh + cd .. + + - name: Set up scons cache + uses: actions/cache@v3 + with: + path: ${{github.workspace}}/.scons_cache/ + key: ${{matrix.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} + restore-keys: | + ${{env.BIN}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} + ${{env.BIN}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} + ${{env.BIN}}-${{env.GODOT_BASE_BRANCH}} + + - name: Compilation + env: + SCONS_CACHE: ${{github.workspace}}/.scons_cache/ + run: | + PATH=${GITHUB_WORKSPACE}/buildroot/bin:$PATH + scons platform=linuxbsd target=${{matrix.target}} arch=${{matrix.arch}} module_mono_enabled=${{matrix.build-mono}} ${{env.SCONSFLAGS}} + + - name: Prepare artifact + env: + OUTDIR: ${{ startsWith(matrix.target, 'template') && 'out/templates' || 'out/' }} + run: | + strip ./bin/godot.* + chmod +x ./bin/godot.* + mkdir -p ${{env.OUTDIR}} + mv ./bin/godot.* ${{env.OUTDIR}} + + - name: Upload artifact + uses: actions/upload-artifact@v3 + env: + NAME_EDITOR: ${{env.NAME_PREFIX}}.${{matrix.target}}.linux.${{matrix.arch}}${{ matrix.build-mono == true && '.mono' || '' }} + NAME_TEMPLATES: ${{env.NAME_PREFIX}}.export-templates${{ matrix.build-mono == true && '.mono' || '' }} + with: + name: ${{ startsWith(matrix.target, 'template') && env.NAME_TEMPLATES || env.NAME_EDITOR }} + path: out/* + + windows-dot-net: + runs-on: "windows-latest" + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Editor .NET (x86_64, release) + target: editor + arch: x86_64 + build-mono: true + + - name: Template .NET (x86_64, release) + target: template_release + arch: x86_64 + build-mono: true + + env: + BIN: godot.windows.${{matrix.target}}.${{matrix.arch}}${{ matrix.build-mono == true && '.mono' || '' }} + + steps: + - name: Clone Godot + uses: actions/checkout@v3 + with: + repository: godotengine/godot + ref: ${{ inputs.godot-treeish }} + + - name: Clone LimboAI module + uses: actions/checkout@v3 + with: + path: modules/limboai + ref: ${{ inputs.limboai-treeish }} + + # Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables. + - uses: ./modules/limboai/.github/actions/init-version + + - name: Set up Python 3.x + uses: actions/setup-python@v4 + with: + python-version: '3.x' + architecture: 'x64' + + - name: Set up scons + run: | + python -c "import sys; print(sys.version)" + python -m pip install scons==4.4.0 + python --version + scons --version + + - name: Set up MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Set up scons cache + uses: actions/cache@v3 + with: + path: ${{github.workspace}}/.scons_cache/ + key: ${{matrix.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} + restore-keys: | + ${{env.BIN}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} + ${{env.BIN}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} + ${{env.BIN}}-${{env.GODOT_BASE_BRANCH}} + + - name: Compilation + env: + SCONS_CACHE: ${{github.workspace}}/.scons_cache/ + run: | + scons -j2 platform=windows target=${{matrix.target}} arch=${{matrix.arch}} module_mono_enabled=${{matrix.build-mono}} ${{env.SCONSFLAGS}} + + - name: Generate C# glue + if: matrix.build-mono && matrix.target == 'editor' + env: + GODOT_VERSION_STATUS: limboai + run: | + ./bin/${{ env.BIN }} --headless --generate-mono-glue ./modules/mono/glue || true + + - name: Build .NET solutions + if: matrix.build-mono && matrix.target == 'editor' + env: + GODOT_VERSION_STATUS: limboai + run: | + python ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=windows + + - name: Prepare artifact + shell: bash + env: + OUTDIR: ${{ startsWith(matrix.target, 'template') && 'out/templates' || 'out/' }} + run: | + rm -f bin/*.{exp,lib,pdb} + mkdir -p out/templates/ + mv bin/* ${{env.OUTDIR}} + + - name: Upload artifact + uses: actions/upload-artifact@v3 + env: + NAME_EDITOR: ${{env.NAME_PREFIX}}.${{matrix.target}}.windows.${{matrix.arch}}${{ matrix.build-mono == true && '.mono' || '' }} + NAME_TEMPLATES: ${{env.NAME_PREFIX}}.export-templates${{ matrix.build-mono == true && '.mono' || '' }} + with: + name: ${{ startsWith(matrix.target, 'template') && env.NAME_TEMPLATES || env.NAME_EDITOR }} + path: out/*