# Based on: https://github.com/onqtam/doctest/blob/master/.github/workflows/main.yml name: CI on: [push, pull_request] jobs: ci: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} env: CMAKE_GENERATOR: Ninja strategy: fail-fast: false matrix: name: [ ubuntu-18.04-gcc-4.9, 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-20.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.3, macOS-latest-xcode-12.2, ] include: - name: ubuntu-18.04-gcc-4.9 os: ubuntu-18.04 compiler: gcc version: "4.9" - 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-20.04-clang-9 os: ubuntu-20.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.3 os: macOS-latest compiler: xcode version: "11.3" - name: macOS-latest-xcode-12.2 os: macOS-latest compiler: xcode version: "12.2" steps: - uses: actions/checkout@v1 - name: Install (Linux) if: runner.os == 'Linux' run: | # 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" 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 -o APT::Immediate-Configure=0 if [ "${{ matrix.compiler }}" = "gcc" ]; then sudo apt-get install -y g++-${{ matrix.version }} g++-${{ matrix.version }}-multilib echo "CC=gcc-${{ matrix.version }}" >> $GITHUB_ENV echo "CXX=g++-${{ matrix.version }}" >> $GITHUB_ENV else sudo apt-get install -y clang-${{ matrix.version }} g++-multilib echo "CC=clang-${{ matrix.version }}" >> $GITHUB_ENV echo "CXX=clang++-${{ matrix.version }}" >> $GITHUB_ENV fi - name: Install (macOS) if: runner.os == 'macOS' run: | brew install ninja if [ "${{ matrix.compiler }}" = "gcc" ]; then brew install gcc@${{ matrix.version }} brew link gcc@${{ matrix.version }} echo "CC=gcc-${{ matrix.version }}" >> $GITHUB_ENV echo "CXX=g++-${{ matrix.version }}" >> $GITHUB_ENV else sudo xcode-select -switch /Applications/Xcode_${{ matrix.version }}.app echo "CC=clang" >> $GITHUB_ENV echo "CXX=clang++" >> $GITHUB_ENV 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 choco install mingw echo "CC=gcc" >> $GITHUB_ENV echo "CXX=g++" >> $GITHUB_ENV } elseif ("${{ matrix.compiler }}" -eq "clang") { echo "CC=clang" >> $GITHUB_ENV echo "CXX=clang++" >> $GITHUB_ENV } else { echo "CC=${{ matrix.compiler }}" >> $GITHUB_ENV echo "CXX=${{ matrix.compiler }}" >> $GITHUB_ENV } # Scoop modifies the PATH so we make the modified PATH global. echo "PATH=$env:PATH" >> $GITHUB_ENV - 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