name: ci

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

env:
  PREMAKE_VERSION: "5.0.0-beta2"

jobs:
  build-test-linux:
    env:
      PREMAKE_CONFIG: gmake2
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        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.1
        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: Test
        working-directory: ${{ github.workspace }}/build/lib/Release_x86/tests
        run: |
          ./ObjCommonTests
          ./ObjLoadingTests
          ./ParserTests
          ./ZoneCodeGeneratorLibTests
          ./ZoneCommonTests
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: oat-linux
          path: |
            ${{ github.workspace }}/build/bin/Release_x86

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

      - name: Add MSBuild to PATH
        uses: microsoft/setup-msbuild@v1.0.2

      - name: Setup premake
        uses: abel0b/setup-premake@v2.1
        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: Test
        working-directory: ${{ github.workspace }}/build/lib/Release_x86/tests
        run: |
          ./ObjCommonTests
          ./ObjLoadingTests
          ./ParserTests
          ./ZoneCodeGeneratorLibTests
          ./ZoneCommonTests
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: oat-windows
          path: |
            ${{ github.workspace }}/build/bin/Release_x86