name: CMake

on: [ push, pull_request ]

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Debug
  CMAKE_BUILD_PARALLEL_LEVEL: 4
  CTEST_PARALLEL_LEVEL: 5

jobs:
  build-linux:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest
    strategy:
      matrix:
        cxxflags: [ "", "-fsanitize=address", "-fsanitize=undefined", "-Wall -Wextra -Werror" ]
    env:
      CXXFLAGS: ${{ matrix.cxxflags }}
    steps:
    - uses: actions/checkout@v3
      with: { submodules: true }

    - name: Configure CMake
      # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
      # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}

    - name: Build
      # Build your program with the given configuration
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      # Execute tests defined by the CMake configuration.  
      # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
      run: ctest -C ${{env.BUILD_TYPE}}

  build-windows:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v3
      with: { submodules: true }

    - name: Bring runner env vars to workflows
      shell: bash
      run: |
        echo "local_app_data=$LOCALAPPDATA" >> $GITHUB_ENV
        echo "vcpkg_root=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV
        vcpkg search icu | awk '$1=="icu"{ print "icu_ver="$2 }' >> $GITHUB_ENV

    - uses: actions/cache@v3
      with:
        # use backslashes in path here for Windows.
        path: ${{ env.local_app_data }}\vcpkg\archives
        key: windows-vcpkg-cache-${{ env.icu_ver }}
        restore-keys: windows-vcpkg-cache-

    - name: Pull Vcpkg dependencies
      run: vcpkg install icu getopt --triplet=x64-windows

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
      env:
        CMAKE_TOOLCHAIN_FILE: ${{ env.vcpkg_root }}/scripts/buildsystems/vcpkg.cmake

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ctest -C ${{env.BUILD_TYPE}}
