name: release

on:
  push:
    tags:
      - "v*.*.*"

env:
  PREMAKE_VERSION: "5.0.0-beta2"

jobs:
  build-release-linux:
    env:
      PREMAKE_CONFIG: gmake2
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Install multilib
        run: |
          sudo apt-get update
          sudo apt-get install gcc-multilib g++-multilib

      - name: Setup premake
        uses: abel0b/setup-premake@v2.3
        with:
          version: ${{ env.PREMAKE_VERSION }}

      - name: Premake generate
        working-directory: ${{ github.workspace }}
        run: premake5 ${{ env.PREMAKE_CONFIG }}

      - name: Build
        working-directory: ${{ github.workspace }}
        run: make -C build -j$(nproc) config=release_x86 all

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: oat-linux
          path: |
            ${{ github.workspace }}/build/bin/Release_x86

  build-release-windows:
    env:
      PREMAKE_CONFIG: vs2022
    runs-on: windows-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Add MSBuild to PATH
        uses: microsoft/setup-msbuild@v2.0.0

      - name: Setup premake
        uses: abel0b/setup-premake@v2.3
        with:
          version: ${{ env.PREMAKE_VERSION }}

      - name: Premake generate
        working-directory: ${{ github.workspace }}
        run: premake5 ${{ env.PREMAKE_CONFIG }}

      - name: Build
        working-directory: ${{ github.workspace }}
        run: msbuild /m /p:Configuration=Release /p:Platform=Win32 build
        
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: oat-windows
          path: |
            ${{ github.workspace }}/build/bin/Release_x86
  
  release:
    needs: 
      - build-release-linux
      - build-release-windows
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: write
    steps:
      - uses: actions/download-artifact@v4
      - name: Zip artifacts
        run: |
          7z a oat-linux.tar ./oat-linux/*
          7z a oat-linux.tar.gz ./oat-linux.tar
          7z a oat-windows.zip ./oat-windows/*
      - uses: ncipollo/release-action@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          artifacts: "oat-linux.tar.gz,oat-windows.zip"
          artifactErrorsFailBuild: true
          allowUpdates: true
          draft: true
          omitBodyDuringUpdate: true
          omitDraftDuringUpdate: true