name: Build Puzzle Quest on: push: branches: [dev, main] pull_request: branches: [dev, main] workflow_dispatch: env: GODOT_VERSION: "4.6" GODOT_IMAGE: "barichello/godot-ci:4.6" jobs: # --------------------------------------------------------------------------- # 1. GDScript validation — parse every script and fail on errors / warnings. # --------------------------------------------------------------------------- validate: name: Validate GDScript runs-on: ubuntu-latest container: image: barichello/godot-ci:4.6 steps: - uses: actions/checkout@v4 - name: Import project (parses every .gd / .tscn) run: | godot --headless --import 2>&1 | tee /tmp/godot-import.log || true - name: Fail on parse / script errors run: | if grep -qE "SCRIPT ERROR|Parse Error|ERROR: .*\.gd" /tmp/godot-import.log; then echo "::error::GDScript errors detected during import" grep -E "SCRIPT ERROR|Parse Error|ERROR: .*\.gd" /tmp/godot-import.log exit 1 fi - name: Upload import cache uses: actions/upload-artifact@v3 with: name: godot-import-cache path: .godot retention-days: 1 # --------------------------------------------------------------------------- # 2. Desktop exports (Windows / Linux / macOS) — runs in parallel. # macOS preset must be added in the Godot editor before this matrix entry # can succeed (export_presets.cfg currently has none). # --------------------------------------------------------------------------- export-desktop: name: Export ${{ matrix.platform }} needs: validate runs-on: ubuntu-latest container: image: barichello/godot-ci:4.6 strategy: fail-fast: false matrix: include: - platform: Windows preset: WindowsDebug output: releases/windows/Puzzle-Quest.exe artifact_path: releases/windows - platform: Linux preset: Linux/X11Debug output: releases/linux/Puzzle-Quest.x86_64 artifact_path: releases/linux - platform: macOS preset: macOS output: releases/macos/Puzzle-Quest.zip artifact_path: releases/macos steps: - uses: actions/checkout@v4 - name: Restore import cache uses: actions/download-artifact@v3 with: name: godot-import-cache path: .godot - name: Prepare output dir run: mkdir -p "${{ matrix.artifact_path }}" - name: Export ${{ matrix.platform }} run: godot --headless --export-debug "${{ matrix.preset }}" "${{ matrix.output }}" - name: Upload artifact uses: actions/upload-artifact@v3 with: name: PuzzleQuest-${{ matrix.platform }} path: ${{ matrix.artifact_path }} if-no-files-found: error retention-days: 14 # --------------------------------------------------------------------------- # 3. Android export — needs JDK + Android SDK on top of the Godot image. # Provide ANDROID_KEYSTORE_BASE64 as a Gitea secret for a stable signature; # otherwise a fresh debug keystore is generated on each run. # --------------------------------------------------------------------------- export-android: name: Export Android needs: validate runs-on: ubuntu-latest container: image: barichello/godot-ci:4.6 env: ANDROID_HOME: /opt/android-sdk JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64 steps: - uses: actions/checkout@v4 - name: Install JDK 17 + unzip run: | apt-get update apt-get install -y --no-install-recommends openjdk-17-jdk wget unzip - name: Install Android command-line tools + SDK run: | mkdir -p "$ANDROID_HOME/cmdline-tools" wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/cmdline.zip unzip -q /tmp/cmdline.zip -d "$ANDROID_HOME/cmdline-tools" mv "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/latest" yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --licenses >/dev/null "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" \ "platform-tools" "platforms;android-34" "build-tools;34.0.0" >/dev/null - name: Provision debug keystore env: ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} run: | if [ -n "$ANDROID_KEYSTORE_BASE64" ]; then echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > /root/debug.keystore else keytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android \ -keystore /root/debug.keystore -storepass android \ -dname "CN=Android Debug,O=Android,C=US" -validity 9999 fi sed -i 's@keystore/debug=".*"@keystore/debug="/root/debug.keystore"@g' export_presets.cfg - name: Write Godot editor settings (Android SDK / JDK paths) run: | mkdir -p ~/.config/godot cat > ~/.config/godot/editor_settings-4.tres <