name: RMG

on: [push, pull_request]

jobs:
  Linux:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: hendrikmuhs/ccache-action@v1.2.5
        with:
          key: Linux
      - name: Install Packages
        run: |
          sudo apt-get purge grub\* --yes --allow-remove-essential
          sudo add-apt-repository ppa:okirby/qt6-backports --yes
          sudo apt-get -qq update
          sudo apt-get upgrade
          sudo apt-get -y install cmake ninja-build libusb-1.0-0-dev libhidapi-dev libsamplerate0-dev libspeex-dev libminizip-dev libsdl2-dev libfreetype6-dev libgl1-mesa-dev libglu1-mesa-dev pkg-config zlib1g-dev binutils-dev libspeexdsp-dev qt6-base-dev libqt6svg6-dev build-essential nasm git zip appstream
      - name: Prepare Environment
        run: |
          echo "GIT_REVISION=$(git describe --tags --always)" >> $GITHUB_ENV
      - name: Build RMG (AppImage)
        run: |
          mkdir Build Build/AppImage Bin/ -p
          export src_dir="$(pwd)"
          export build_dir="$(pwd)/build"
          export bin_dir="$(pwd)/Bin/AppImage"
          cmake -S "$src_dir" -B "$build_dir" -DCMAKE_BUILD_TYPE="Release" -DPORTABLE_INSTALL="OFF" -DUPDATER=ON -DAPPIMAGE_UPDATER=ON -DCMAKE_INSTALL_PREFIX="/usr" -G "Ninja"
          cmake --build "$build_dir"
          cmake --install "$build_dir" --prefix="$bin_dir/usr"
        shell: bash
      - name: Create AppImage
        run: |
          ./Package/AppImage/Create.sh
        shell: bash
      - name: Upload RMG (AppImage)
        uses: actions/upload-artifact@v3
        with:
          name: RMG-Portable-Linux64-${{ env.GIT_REVISION }}
          path: Bin/*.AppImage

  Windows:
    runs-on: windows-2019
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: hendrikmuhs/ccache-action@v1.2.5
        with:
          key: Windows
      - uses: msys2/setup-msys2@v2
        with:
          path-type: inherit
          update: true
          install: >-
            make
            mingw-w64-x86_64-cmake
            mingw-w64-x86_64-ninja
            mingw-w64-x86_64-gcc
            mingw-w64-x86_64-hidapi
            mingw-w64-x86_64-freetype
            mingw-w64-x86_64-libpng
            mingw-w64-x86_64-SDL2
            mingw-w64-x86_64-qt6
            mingw-w64-x86_64-SDL2
            mingw-w64-x86_64-libusb
            mingw-w64-x86_64-hidapi
            mingw-w64-x86_64-speexdsp
            mingw-w64-x86_64-libsamplerate
            mingw-w64-x86_64-nasm
            mingw-w64-x86_64-minizip
            git
      - name: Prepare Environment
        run: |
          $env:revision = git describe --tags --always
          echo "GIT_REVISION=$env:revision" >> $env:GITHUB_ENV
        shell: pwsh
      - name: Build RMG (Portable)
        run: ./Source/Script/Build.sh Release
        shell: msys2 {0}
      - name: Create Installer
        run: .\Build\Release\Source\Installer\CreateInstaller.bat
      - name: Upload RMG (Portable)
        uses: actions/upload-artifact@v3
        with:
          name: RMG-Portable-Windows64-${{ env.GIT_REVISION }}
          path: Bin/Release/*
      - name: Upload RMG (Installer)
        uses: actions/upload-artifact@v3
        with:
          name: RMG-Setup-Windows64-${{ env.GIT_REVISION }}
          path: Bin/*.exe
