name: CI

# Trigger this workflow on push or pull request
on: [push, pull_request]

env:
  SRC_DIR_PATH: desktop_version

jobs:
  build-mac:
    name: Build (macos-latest)

    runs-on: macos-latest

    env:
      CXXFLAGS: -I/usr/local/include/SDL2
      LDFLAGS: -L/usr/local/lib

    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true

    - name: Install dependencies
      run: brew install ninja sdl2

    - name: CMake configure (default version)
      run: |
        mkdir ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
        cmake -GNinja ..
    - name: Build (default version)
      run: ninja -C ${SRC_DIR_PATH}/build

    - name: CMake configure (official)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DOFFICIAL_BUILD=ON ..
    - name: Build (official)
      run: |
        ninja -C ${SRC_DIR_PATH}/build

    - name: CMake configure (M&P)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
    - name: Build (M&P)
      run: ninja -C ${SRC_DIR_PATH}/build

    - name: CMake configure (no custom levels)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DMAKEANDPLAY=OFF -DCUSTOM_LEVEL_SUPPORT=DISABLED ..
    - name: Build (no custom levels)
      run: ninja -C ${SRC_DIR_PATH}/build

    - name: CMake configure (no editor)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DCUSTOM_LEVEL_SUPPORT=NO_EDITOR ..
    - name: Build (no editor)
      run: ninja -C ${SRC_DIR_PATH}/build

  build-lin:
    name: Build (CentOS 7)

    runs-on: ubuntu-latest
    container: ghcr.io/infoteddy/vvvvvv-build@sha256:50a2f769db3ca180286e9a76c1bf06b7016544a78e1fc7a9a0cc1144c675ced1

    env:
      CXXFLAGS: -I/usr/local/include/SDL2
      LDFLAGS: -L/usr/local/lib

    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true

    - name: CMake configure (default version)
      run: |
        mkdir ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
        cmake ..
    - name: Build (default version)
      run: make -j $(nproc) -C ${SRC_DIR_PATH}/build

    - name: CMake configure (official)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DOFFICIAL_BUILD=ON ..
    - name: Build (official)
      run: |
        make -j $(nproc) -C ${SRC_DIR_PATH}/build

    - name: CMake configure (M&P)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
    - name: Build (M&P)
      run: make -j $(nproc) -C ${SRC_DIR_PATH}/build

    - name: CMake configure (no custom levels)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DMAKEANDPLAY=OFF -DCUSTOM_LEVEL_SUPPORT=DISABLED ..
    - name: Build (no custom levels)
      run: make -j $(nproc) -C ${SRC_DIR_PATH}/build

    - name: CMake configure (no editor)
      run: |
        cd ${SRC_DIR_PATH}/build
        cmake -DCUSTOM_LEVEL_SUPPORT=NO_EDITOR ..
    - name: Build (no editor)
      run: make -j $(nproc) -C ${SRC_DIR_PATH}/build

  build-win:
    name: Build (windows-latest)

    runs-on: windows-latest

    env:
      SDL_VERSION: 2.24.0

    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true

    - name: Cache SDL
      uses: actions/cache@v2
      env:
        cache-name: cache-sdl
      with:
        path: C:\SDL
        key: ${{ runner.os }}-build-${{ env.cache-name }}

    - name: Download SDL if not cached
      run: |
        if (-Not (Test-Path C:\SDL))
        {
          Invoke-WebRequest "https://github.com/libsdl-org/SDL/releases/download/release-$env:SDL_VERSION/SDL2-devel-$env:SDL_VERSION-VC.zip" -o C:\SDL.zip
          Expand-Archive C:\SDL.zip -DestinationPath C:\
        }

    - name: CMake configure (default version)
      run: |
        mkdir $env:SRC_DIR_PATH/build
        cd $env:SRC_DIR_PATH/build
        $env:LDFLAGS =  "/LIBPATH:C:\SDL2-$env:SDL_VERSION\lib\x86 "
        cmake -G "Visual Studio 17 2022" -A Win32 `
              -DSDL2_INCLUDE_DIRS="C:\SDL2-$env:SDL_VERSION\include" `
              -DSDL2_LIBRARIES="SDL2;SDL2main" ..
    - name: Build (default version)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake --build .

    - name: CMake configure (official)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake -DOFFICIAL_BUILD=ON ..
    - name: Build (official)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake --build .

    - name: CMake configure (M&P)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
    - name: Build (M&P)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake --build .

    - name: CMake configure (no custom levels)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake -DMAKEANDPLAY=OFF -DCUSTOM_LEVEL_SUPPORT=DISABLED ..
    - name: Build (no custom levels)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake --build .

    - name: CMake configure (no editor)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake -DCUSTOM_LEVEL_SUPPORT=NO_EDITOR ..
    - name: Build (no editor)
      run: |
        cd $env:SRC_DIR_PATH/build
        cmake --build .
