name: Build & Deploy Engine
on: [push, pull_request]
jobs:
#  cleanup:
#    runs-on: self-hosted
#    steps:
#    - name: Cleanup
#      run: rm -rf .* || true
  build:
    runs-on: ${{ matrix.os }}
    continue-on-error: true
    strategy:
      fail-fast: false
      matrix:
        include:
          # Linux build specifically want oldest Ubuntu as possible
          # to be crossdistribution compatible, otherwise use ubuntu-latest
          - os: ubuntu-20.04
            targetos: linux
            targetarch: amd64
          - os: ubuntu-20.04
            targetos: linux
            targetarch: i386
#          - os: ubuntu-aarch64-20.04
#            targetos: linux
#            targetarch: aarch64
          - os: ubuntu-20.04
            targetos: android
            targetarch: multiarch
#          - os: ubuntu-20.04
#            targetos: motomagx
#            targetarch: armv6

          - os: ubuntu-latest
            targetos: nswitch
            targetarch: arm64
          - os: ubuntu-latest
            targetos: psvita
            targetarch: armv7hf
          - os: windows-latest
            targetos: win32
            targetarch: amd64
          - os: windows-2019 # always use the oldest possible for 32-bit because of older compilers, and better support of certain legacy OSes
            targetos: win32
            targetarch: i386
          - os: macos-14 # in GitHub documentation, it's an ARM64 machine
            targetos: apple
            targetarch: arm64
          - os: macos-12 # in GitHub documentation, it's an x86 machine
            targetos: apple
            targetarch: amd64
    env:
      SDL_VERSION: 2.30.3
      GH_CPU_ARCH: ${{ matrix.targetarch }}
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      with:
        submodules: recursive
    - name: Install dependencies
      run: bash scripts/gha/deps_${{ matrix.targetos }}.sh
    - name: Build engine
      env:
        FWGS_PFX_PASSWORD: ${{ secrets.FWGS_PFX_PASSWORD }}
      run: bash scripts/gha/build_${{ matrix.targetos }}.sh
    - name: Upload engine (artifacts)
      uses: actions/upload-artifact@v4
      with:
        name: artifact-${{ matrix.targetos }}-${{ matrix.targetarch }}
        path: artifacts/*
  flatpak:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - app: su.xash.Engine.Compat.i386
    container:
      image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
      options: --privileged
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      with:
        submodules: recursive
    - name: Build flatpak (Compat.i386)
      uses: FWGS/flatpak-github-actions/flatpak-builder@v6.3
      with:
        bundle: ${{ matrix.app }}.flatpak
        manifest-path: scripts/flatpak/${{ matrix.app }}.yml
  release:
    name: "Upload releases"
    runs-on: ubuntu-latest
    needs: [build, flatpak]
    if: ${{ github.event_name == 'push' }}
    steps:
    - name: Remove old release, fetch artifacts, repackage binaries and upload new release
      env:
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        RELEASE_TAG: ${{ github.ref_name == 'master' && 'continuous' || format('continuous-{0}', github.ref_name) }}
      run: |
        gh release delete "$RELEASE_TAG" \
          --yes \
          --cleanup-tag \
          --repo "$GITHUB_REPOSITORY" || true
        sleep 20s
        gh run download "$GITHUB_RUN_ID" \
          --dir artifacts/ \
          --repo "$GITHUB_REPOSITORY"
        pushd artifacts/
        echo "Found artifacts:"
        ls
        for i in $(find -mindepth 1 -maxdepth 1 -type d); do
          mv "$i"/* .
          rm -rf "$i"
        done
        echo "Repackaged artifacts:"
        ls -R
        popd
        sleep 20s
        gh release create "$RELEASE_TAG" artifacts/* \
          --title "Xash3D FWGS Continuous ${{ github.ref_name }} Build" \
          --target $GITHUB_SHA \
          --repo "$GITHUB_REPOSITORY" \
          --prerelease
