name: Push

on:
  push:
    branches:
      - master

jobs:
  build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}

    strategy:
      fail-fast: false
      matrix:
        config:
          - name: Ubuntu Latest (GCC)
            os: ubuntu-latest
            build_type: Release
            test_path: WhoaTest
            cc: gcc
            cxx: g++

          - name: macOS Latest (Clang)
            os: macos-latest
            build_type: Release
            test_path: WhoaTest
            cc: clang
            cxx: clang++

          - name: Windows Latest (MSVC)
            os: windows-latest
            build_type: Release
            test_path: Release/WhoaTest
            cc: cl
            cxx: cl

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Prepare
        run: mkdir build

      - name: Configure
        run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }}

      - name: Build
        run: cmake --build build --config ${{ matrix.config.build_type }}

      - name: Test
        run: ./build/bin/${{ matrix.config.test_path }}
