name: 🔗 All builds
on:
  workflow_dispatch:
    inputs:
      godot-ref:
        description: A tag, branch or commit hash in the Godot repository.
        type: string
        default: 4.3-stable
      limboai-ref:
        description: A tag, branch or commit hash in the LimboAI repository.
        type: string
        default: master
      godot-cpp-ref:
        description: A tag, branch or commit hash in the godot-cpp repository.
        type: string
        default: godot-4.3-stable

jobs:
  cache-sha:
    name: Cache SHA
    runs-on: ubuntu-latest
    outputs:
      godot-sha: ${{ steps.cache-sha.outputs.godot-sha }}
      limboai-sha: ${{ steps.cache-sha.outputs.limboai-sha }}
    steps:
      - name: Clone Godot
        uses: actions/checkout@v4
        with:
          repository: godotengine/godot
          ref: ${{ inputs.godot-ref }}

      - name: Clone LimboAI module
        uses: actions/checkout@v4
        with:
          path: modules/limboai
          ref: ${{ inputs.limboai-ref }}

      - name: Cache SHA
        id: cache-sha
        run: |
          echo "godot-sha=$(git describe --tags --exact-match HEAD || git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
          cd modules/limboai
          echo "limboai-sha=$(git describe --tags --exact-match HEAD || git rev-parse HEAD)" >> "$GITHUB_OUTPUT"

  android-build:
    name: 🤖 Android
    needs: cache-sha
    uses: ./.github/workflows/android.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}

  ios-build:
    name: 🍏 iOS
    needs: cache-sha
    uses: ./.github/workflows/ios.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}

  linux-build:
    name: 🐧 Linux
    needs: cache-sha
    uses: ./.github/workflows/linux.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
      test-build: false

  macos-build:
    name: 🍎 macOS
    needs: cache-sha
    uses: ./.github/workflows/macos.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}

  windows-build:
    name: 🪟 Windows
    needs: cache-sha
    uses: ./.github/workflows/windows.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
      test-build: false

  web-build:
    name: 🌐 Web
    needs: cache-sha
    uses: ./.github/workflows/web.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}

  gdextension:
    name: 🔌 GDExtension
    needs: cache-sha
    uses: ./.github/workflows/gdextension.yml
    with:
      godot-cpp-ref: ${{ inputs.godot-cpp-ref }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
      test-build: false

  demo:
    name: 🎮️ Demo project
    needs: cache-sha
    uses: ./.github/workflows/demo.yml
    with:
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}

  merge_templates:
    name: 📦 Merge templates
    if: ${{ always() }}
    needs:
      [
        cache-sha,
        android-build,
        ios-build,
        linux-build,
        macos-build,
        windows-build,
        web-build,
      ]
    uses: ./.github/workflows/merge_templates.yml
    with:
      godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
      limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}