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: 32
#          - os: ubuntu-20.04
#            targetos: android
#            targetarch: 64

#          - 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
    env:
      SDL_VERSION: 2.28.5
      GH_CPU_ARCH: ${{ matrix.targetarch }}
      ANDROID_SDK_TOOLS_VER: 4333796
    steps:
    - name: Checkout
      uses: actions/checkout@v3
      with:
        submodules: recursive
    - name: Install dependencies
      run: bash scripts/gha/deps_${{ matrix.targetos }}.sh
    - name: Build engine
      run: bash scripts/gha/build_${{ matrix.targetos }}.sh
    - name: Upload engine (artifacts)
      uses: actions/upload-artifact@v3
      with:
        name: artifact-${{ matrix.targetos }}-${{ matrix.targetarch }}
        path: artifacts/*
  flatpak:
    name: "Flatpak"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - app: su.xash.Engine.Compat.i386
    container:
      image: bilelmoussaoui/flatpak-github-actions:freedesktop-22.08
      options: --privileged
    steps:
    - name: Checkout
      uses: actions/checkout@v3
      with:
        submodules: recursive
    - name: Build flatpak (Compat.i386)
      uses: FWGS/flatpak-github-actions/flatpak-builder@v6.1
      with:
        bundle: ${{ matrix.app }}.flatpak
        manifest-path: scripts/flatpak/${{ matrix.app }}.yml
    - name: Upload engine (artifacts)
      uses: actions/upload-artifact@v3
      with:
        name: artifact-${{ matrix.targetos }}-${{ matrix.targetarch }}
        path: artifacts/*
  release:
    name: "Upload releases"
    runs-on: ubuntu-latest
    needs: [build, flatpak]
    if: ${{ github.event_name == 'push' }}
    steps:
    - name: Remove old release
      uses: FWGS/delete-tag-and-release@v0.2.1-dev
      with:
        tag_name: ${{ github.ref_name == 'master' && 'continuous' || format('continuous-{0}', github.ref_name) }}
        delete_release: true
        github_token: ${{ secrets.GITHUB_TOKEN }}
    - name: Fetch artifacts
      uses: actions/download-artifact@v3.0.1
      with:
        path: artifacts/
    - name: Repackage binaries and allow GitHub to process removed release for few seconds
      run: |
        cd artifacts/
        for i in artifact-* su.xash.Engine.*; do
          mv "$i"/* .
          rm -rf "$i"
        done
        ls -R .
        cd ../
        sleep 20s
    - name: Upload new release
      uses: FWGS/action-gh-release@v0.1.15
      with:
        name: Xash3D FWGS Continuous ${{ github.ref_name }} Build
        tag_name: ${{ github.ref_name == 'master' && 'continuous' || format('continuous-{0}', github.ref_name) }}
        prerelease: true
        token: ${{ secrets.GITHUB_TOKEN }}
        files: artifacts/*
        draft: false
