name: Deploy Workflow
on:
  push:
    tags:
      - "*"
jobs:
  build-linux:
    name: Build Linux
    timeout-minutes: 30
    runs-on: ubuntu-latest
    container: rust:1.71.0
    steps:
      - name: Checkout code from repository
        uses: actions/checkout@v3
      - name: Build Base
        run: |
          cargo build --release
      - name: Build SDL
        run: |
          cd frontends/sdl
          apt-get update && apt-get install -y -q zip
          cargo install cargo-vcpkg && cargo vcpkg -v build
          cargo build --release
      - name: Build Libretro
        run: |
          cd frontends/libretro
          cargo build --release
      - name: Transform filenames
        run: |
          cd target/release
          mv boytacean-sdl boytacean-sdl-linux-x64
          mv libboytacean_libretro.so boytacean_libretro.so
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: boytacean-linux
          path: |
            target/release/boytacean-sdl-linux-x64
            target/release/libboytacean.so
            target/release/boytacean_libretro.so
          retention-days: 5
  build-windows:
    name: Build Windows
    timeout-minutes: 30
    runs-on: windows-latest
    steps:
      - name: Checkout code from repository
        uses: actions/checkout@v3
      - name: Setup Rust
        run: |
          rustup install 1.71.0
          rustup override set 1.71.0
          rustup default stable-msvc
      - name: Build Base
        run: |
          cargo build --release
      - name: Build SDL
        run: |
          cd frontends/sdl
          cargo install cargo-vcpkg && cargo vcpkg -v build
          cargo build --release
      - name: Build Libretro
        run: |
          cd frontends/libretro
          cargo build --release
      - name: Transform filenames
        run: |
          cd target/release
          mv boytacean-sdl.exe boytacean-sdl-win32-x64.exe
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: boytacean-win32
          path: |
            target/release/boytacean-sdl-win32-x64.exe
            target/release/boytacean.dll
            target/release/boytacean_libretro.dll
          retention-days: 5
  build-mac:
    name: Build Mac
    timeout-minutes: 30
    runs-on: macos-latest
    steps:
      - name: Checkout code from repository
        uses: actions/checkout@v3
      - name: Setup Rust
        run: |
          rustup install 1.71.0
          rustup override set 1.71.0
      - name: Build Base
        run: |
          cargo build --release
      - name: Build SDL
        run: |
          cd frontends/sdl
          cargo install cargo-vcpkg && cargo vcpkg -v build
          cargo build --release
      - name: Build Libretro
        run: |
          cd frontends/libretro
          cargo build --release
      - name: Transform filenames
        run: |
          cd target/release
          mv boytacean-sdl boytacean-sdl-mac-x64
          mv libboytacean_libretro.dylib boytacean_libretro.dylib
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: boytacean-mac
          path: |
            target/release/boytacean-sdl-mac-x64
            target/release/libboytacean.dylib
            target/release/boytacean_libretro.dylib
          retention-days: 5
  release:
    name: Release
    needs: [build-linux, build-windows, build-mac]
    timeout-minutes: 10
    runs-on: ubuntu-latest
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v3
      - name: Create release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            boytacean-sdl-mac-x64
            boytacean-sdl-linux-x64
            boytacean-sdl-win32-x64.exe
            libboytacean.dylib
            libboytacean.so
            boytacean.dll
            boytacean_libretro.dylib
            boytacean_libretro.so
            boytacean_libretro.dll
