name: Full build on: push: branches: [main] tags: ["v*"] pull_request: workflow_dispatch: jobs: checks: name: Import + headless tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Godot 4.3 run: | curl -sL -o /tmp/godot.zip \ https://github.com/godotengine/godot/releases/download/4.3-stable/Godot_v4.3-stable_linux.x86_64.zip unzip -qo /tmp/godot.zip -d /tmp/godot-bin sudo install /tmp/godot-bin/Godot_v4.3-stable_linux.x86_64 /usr/local/bin/godot - name: Cache imported assets uses: actions/cache@v4 with: path: .godot key: godot-import-${{ hashFiles('project.godot', 'src/**/*.gd', 'content/**/*.json') }} - name: Import project (build class cache) run: godot --headless --import - name: Run headless test suite shell: bash run: | set +e output=$(godot --headless --path . --script res://src/test/test_runner.gd 2>&1) status=$? echo "$output" echo "exit=$status" if [ "$status" -ne 0 ]; then echo "::error::Tests failed" exit 1 fi if echo "$output" | grep -q "SCRIPT ERROR"; then echo "::error::Script errors detected" exit 1 fi build: name: Full desktop build + optional release # Tags and manual dispatches produce installable binaries. Branch pushes and # pull requests only run the cheap checks job (export templates are ~1 GB). if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest needs: checks steps: - uses: actions/checkout@v4 - name: Install Godot 4.3 and export templates run: | curl -sL -o /tmp/godot.zip \ https://github.com/godotengine/godot/releases/download/4.3-stable/Godot_v4.3-stable_linux.x86_64.zip unzip -qo /tmp/godot.zip -d /tmp/godot-bin sudo install /tmp/godot-bin/Godot_v4.3-stable_linux.x86_64 /usr/local/bin/godot curl -sL -o /tmp/templates.tpz \ https://github.com/godotengine/godot/releases/download/4.3-stable/Godot_v4.3-stable_export_templates.tpz mkdir -p ~/.local/share/godot/export_templates/4.3.stable cd /tmp && rm -rf tpl && mkdir tpl && unzip -qo templates.tpz -d tpl cp tpl/templates/* "$HOME/.local/share/godot/export_templates/4.3.stable/" 2>/dev/null || true ls "$HOME/.local/share/godot/export_templates/4.3.stable" | head -5 - name: Import project run: godot --headless --import - name: Export Linux, Windows, macOS run: | chmod +x tools/*.sh ./tools/build_releases.sh - name: Upload installers (workflow_dispatch) if: github.event_name == 'workflow_dispatch' uses: actions/upload-artifact@v4 with: name: step-line-build path: build/* if-no-files-found: error - name: Publish Gitea release (tags only) if: startsWith(github.ref, 'refs/tags/') env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} VERSION: ${{ github.ref_name }} run: | chmod +x tools/publish_release.sh ./tools/publish_release.sh "${VERSION#v}"