# Based on: https://github.com/onqtam/doctest/blob/master/.github/workflows/main.yml

name: CI

on: push

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

    env:
      CMAKE_GENERATOR: Ninja

    strategy:
      fail-fast: false
      matrix:
        name: [
          ubuntu-18.04-gcc-5,
          ubuntu-18.04-gcc-6,
          ubuntu-18.04-gcc-7,
          ubuntu-18.04-gcc-8,
          ubuntu-18.04-gcc-9,
          ubuntu-18.04-clang-3.5,
          ubuntu-18.04-clang-3.8,
          ubuntu-18.04-clang-4.0,
          ubuntu-18.04-clang-5.0,
          ubuntu-18.04-clang-6.0,
          ubuntu-18.04-clang-7,
          ubuntu-18.04-clang-8,
          ubuntu-18.04-clang-9,
          windows-2016-cl,
          windows-2016-clang-cl,
          windows-2016-clang,
          windows-2016-gcc,
          windows-2019-cl,
          windows-2019-clang-cl,
          windows-2019-clang,
          windows-2019-gcc,
          macOS-10.15-gcc-7,
          macOS-10.15-gcc-8,
          macOS-10.15-gcc-9,
          macOS-latest-xcode-11.0,
          macOS-latest-xcode-11.3,
        ]

        include:
          - name: ubuntu-18.04-gcc-5
            os: ubuntu-18.04
            compiler: gcc
            version: "5"

          - name: ubuntu-18.04-gcc-6
            os: ubuntu-18.04
            compiler: gcc
            version: "6"

          - name: ubuntu-18.04-gcc-7
            os: ubuntu-18.04
            compiler: gcc
            version: "7"

          - name: ubuntu-18.04-gcc-8
            os: ubuntu-18.04
            compiler: gcc
            version: "8"

          - name: ubuntu-18.04-gcc-9
            os: ubuntu-18.04
            compiler: gcc
            version: "9"

          - name: ubuntu-18.04-clang-3.5
            os: ubuntu-18.04
            compiler: clang
            version: "3.5"

          - name: ubuntu-18.04-clang-3.8
            os: ubuntu-18.04
            compiler: clang
            version: "3.8"

          - name: ubuntu-18.04-clang-4.0
            os: ubuntu-18.04
            compiler: clang
            version: "4.0"

          - name: ubuntu-18.04-clang-5.0
            os: ubuntu-18.04
            compiler: clang
            version: "5.0"

          - name: ubuntu-18.04-clang-6.0
            os: ubuntu-18.04
            compiler: clang
            version: "6.0"

          - name: ubuntu-18.04-clang-7
            os: ubuntu-18.04
            compiler: clang
            version: "7"

          - name: ubuntu-18.04-clang-8
            os: ubuntu-18.04
            compiler: clang
            version: "8"

          - name: ubuntu-18.04-clang-9
            os: ubuntu-18.04
            compiler: clang
            version: "9"

          - name: windows-2016-cl
            os: windows-2016
            compiler: cl

          - name: windows-2016-clang-cl
            os: windows-2016
            compiler: clang-cl

          - name: windows-2016-clang
            os: windows-2016
            compiler: clang

          - name: windows-2019-cl
            os: windows-2019
            compiler: cl

          - name: windows-2016-gcc
            os: windows-2016
            compiler: gcc

          - name: windows-2019-clang-cl
            os: windows-2019
            compiler: clang-cl

          - name: windows-2019-clang
            os: windows-2019
            compiler: clang

          - name: windows-2019-gcc
            os: windows-2019
            compiler: gcc

          - name: macOS-10.15-gcc-7
            os: macOS-10.15
            compiler: gcc
            version: "7"

          - name: macOS-10.15-gcc-8
            os: macOS-10.15
            compiler: gcc
            version: "8"

          - name: macOS-10.15-gcc-9
            os: macOS-10.15
            compiler: gcc
            version: "9"

          - name: macOS-latest-xcode-11.0
            os: macOS-latest
            compiler: xcode
            version: "11"

          - name: macOS-latest-xcode-11.3
            os: macOS-latest
            compiler: xcode
            version: "11.3"

    steps:
      - uses: actions/checkout@v1

      - name: Install (Linux)
        if: runner.os == 'Linux'
        run: |
          # CMake 3.15 allows specifying the generator using the CMAKE_GENERATOR
          # environment variable.
          curl -sSL https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.tar.gz -o cmake.tar.gz
          sudo tar xf cmake.tar.gz --strip 1 -C /usr/local
          # Required for libc6-dbg:i386 and g++-multilib packages which are 
          # needed for x86 builds.
          sudo dpkg --add-architecture i386
          # clang-3.7 and earlier are not available in Bionic anymore so we get
          # them from the Xenial repositories instead.
          sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ xenial main"
          sudo add-apt-repository "deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe"
          
          # LLVM 9 is not in Bionic's repositories so we add the official LLVM repository.
          if [ "${{ matrix.compiler }}" = "clang" ] && [ "${{ matrix.version }}" = "9" ]; then
            sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main"
          fi
          sudo apt-get update
          # libc6-dbg:i386 is required for running valgrind on x86.
          sudo apt-get install -y ninja-build valgrind libc6-dbg:i386
          if [ "${{ matrix.compiler }}" = "gcc" ]; then
            sudo apt-get install -y g++-${{ matrix.version }} g++-${{ matrix.version }}-multilib
            echo "::set-env name=CC::gcc-${{ matrix.version }}"
            echo "::set-env name=CXX::g++-${{ matrix.version }}"
          else
            sudo apt-get install -y clang-${{ matrix.version }} g++-multilib
            echo "::set-env name=CC::clang-${{ matrix.version }}"
            echo "::set-env name=CXX::clang++-${{ matrix.version }}"
          fi
      
      - name: Install (macOS)
        if: runner.os == 'macOS'
        run: |
          brew install cmake ninja
          if [ "${{ matrix.compiler }}" = "gcc" ]; then
            brew install gcc@${{ matrix.version }}
            echo "::set-env name=CC::gcc-${{ matrix.version }}"
            echo "::set-env name=CXX::g++-${{ matrix.version }}"
          else
            sudo xcode-select -switch /Applications/Xcode_${{ matrix.version }}.app
            echo "::set-env name=CC::clang"
            echo "::set-env name=CXX::clang++"
          fi
      
      - name: Install (Windows)
        if: runner.os == 'Windows'
        shell: powershell
        run: |
          Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
          scoop install ninja --global
          if ("${{ matrix.compiler }}".StartsWith("clang")) {
            scoop install llvm --global
          }
          if ("${{ matrix.compiler }}" -eq "gcc") {
            # Chocolatey GCC is broken on the windows-2019 image.
            # See: https://github.com/DaanDeMeyer/doctest/runs/231595515
            # See: https://github.community/t5/GitHub-Actions/Something-is-wrong-with-the-chocolatey-installed-version-of-gcc/td-p/32413
            scoop install gcc --global
            echo "::set-env name=CC::gcc"
            echo "::set-env name=CXX::g++"
          } elseif ("${{ matrix.compiler }}" -eq "clang") {
            echo "::set-env name=CC::clang"
            echo "::set-env name=CXX::clang++"
          } else {
            echo "::set-env name=CC::${{ matrix.compiler }}"
            echo "::set-env name=CXX::${{ matrix.compiler }}"
          }
          # Scoop modifies the PATH so we make the modified PATH global.
          echo "::set-env name=PATH::$env:PATH"
      
      - name: Configure
        if: runner.os == 'Windows'
        run: .github\workflows\vsenv.bat -arch=x64 -host_arch=x64

      - name: Build & Test Debug
        run: |
          cmake -E remove_directory build
          cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug
          cmake --build build -j2
          cd build && ctest -j2 --output-on-failure
        
      - name: Build & Test Release
        run: |
          cmake -E remove_directory build
          cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
          cmake --build build -j2
          cd build && ctest -j2 --output-on-failure
