name: 🔎 Test builds on: workflow_dispatch: push: branches: [ master ] paths-ignore: - "README.md" - "LICENSE" - "**/*.png" - "demo/*" - "doc/*" pull_request: branches: [ master ] paths-ignore: - "README.md" - "LICENSE" - "**/*.png" - "demo/*" # Global settings env: GODOT_TREEISH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes SCONS_CACHE_LIMIT: 7168 DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true jobs: linux-test-builds: runs-on: "ubuntu-20.04" name: ${{ matrix.name }} strategy: fail-fast: false matrix: include: - name: 🐧 Unit tests target: editor arch: x86_64 production: false dev_build: true tests: true build-mono: false artifact: false - name: 🐧 Editor (x86_64, release) target: editor arch: x86_64 production: true dev_build: false tests: false build-mono: false artifact: true - name: 🐧 Template (x86_64, release) target: template_release arch: x86_64 production: true dev_build: false tests: false build-mono: false artifact: true - name: 🐧 Template (x86_64, debug) target: template_debug arch: x86_64 production: true dev_build: false tests: false build-mono: false artifact: true env: BIN: godot.linuxbsd.${{matrix.target}}${{matrix.dev_build == true && '.dev' || ''}}.${{matrix.arch}}${{matrix.build-mono == true && '.mono' || ''}} steps: - name: Clone Godot uses: actions/checkout@v4 with: repository: godotengine/godot ref: ${{ env.GODOT_TREEISH }} - name: Clone LimboAI module uses: actions/checkout@v4 with: path: modules/limboai # 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: ${{env.BIN}}-${{env.GODOT_TREEISH}}-${{github.ref}}-${{github.sha}} restore-keys: | ${{env.BIN}}-${{env.GODOT_TREEISH}}-${{github.ref}}-${{github.sha}} ${{env.BIN}}-${{env.GODOT_TREEISH}}-${{github.ref}} ${{env.BIN}}-${{env.GODOT_TREEISH}} continue-on-error: true - 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 .NET SDK if: matrix.build-mono uses: actions/setup-dotnet@v2 with: dotnet-version: '6.0.x' - name: Setup GCC problem matcher uses: ammaraskar/gcc-problem-matcher@master - 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}} production=${{matrix.production}} dev_build=${{matrix.dev_build}} tests=${{matrix.tests}} module_mono_enabled=${{matrix.build-mono}} ${{env.SCONSFLAGS}} ls -l bin/ - name: Generate C# glue if: matrix.build-mono run: | bin/${{ env.BIN }} --headless --generate-mono-glue ./modules/mono/glue || true - name: Build .NET solutions if: matrix.build-mono run: | ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd # Execute unit tests for the editor - name: Unit tests if: matrix.tests run: | bin/${{ env.BIN }} --version bin/${{ env.BIN }} --help bin/${{ env.BIN }} --test --headless - name: Strip binaries if: matrix.dev_build == false run: strip ./bin/godot.* - name: Prepare artifact if: matrix.artifact env: OUTDIR: ${{ startsWith(matrix.target, 'template') && 'out/templates' || 'out/' }} run: | chmod +x ./bin/godot.* mkdir -p ${{env.OUTDIR}} mv ./bin/godot.* ${{env.OUTDIR}} - name: Upload artifact if: matrix.artifact uses: actions/upload-artifact@v3 env: NAME_EDITOR: ${{env.NAME_PREFIX}}.${{matrix.target}}${{matrix.dev_build == true && '.dev' || ''}}.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/*