| # 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-7, |
| ubuntu-18.04-gcc-8, |
| ubuntu-18.04-gcc-9, |
| ubuntu-20.04-gcc-10, |
| ubuntu-20.04-gcc-11, |
| 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, |
| ubuntu-20.04-clang-10, |
| ubuntu-20.04-clang-11, |
| ubuntu-20.04-clang-11-no-exceptions, |
| 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-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-20.04-gcc-10 |
| os: ubuntu-20.04 |
| compiler: gcc |
| version: "10" |
| |
| - name: ubuntu-20.04-gcc-11 |
| os: ubuntu-20.04 |
| compiler: gcc |
| version: "11" |
| |
| - 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: ubuntu-20.04-clang-10 |
| os: ubuntu-20.04 |
| compiler: clang |
| version: "10" |
| |
| - name: ubuntu-20.04-clang-11 |
| os: ubuntu-20.04 |
| compiler: clang |
| version: "11" |
| |
| - name: ubuntu-20.04-clang-11-no-exceptions |
| os: ubuntu-20.04 |
| compiler: clang |
| version: "11" |
| cmake_vars: "-DCMAKE_CXX_FLAGS=-fno-exceptions -DBUILD_TESTING=OFF -DBUILD_BENCHMARK=ON" |
| |
| - name: windows-2019-cl |
| os: windows-2019 |
| compiler: cl |
| |
| - 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@v2 |
| |
| - 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 ${{ matrix.cmake_vars }} |
| cmake --build build -j2 |
| cd build && ctest -j2 --output-on-failure |