| name: CI |
| |
| on: |
| push: |
| paths-ignore: |
| - 'doc/**' |
| - 'scripts/**' |
| - 'LICENSE.txt' |
| - 'README.md' |
| pull_request: |
| paths-ignore: |
| - 'doc/**' |
| - 'scripts/**' |
| - 'LICENSE.txt' |
| - 'README.md' |
| |
| env: |
| CTEST_OUTPUT_ON_FAILURE: ON |
| CTEST_PARALLEL_LEVEL: 2 |
| |
| jobs: |
| coverage: |
| runs-on: ubuntu-latest |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install |
| run: sudo apt-get install -y ninja-build lcov |
| |
| - name: Generate |
| run: cmake -B build -S . -G Ninja -D CMAKE_CXX_FLAGS="-fprofile-arcs -ftest-coverage" |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Test |
| run: ctest --test-dir build --no-tests=error |
| |
| - name: LCOV |
| run: | |
| mkdir coverage |
| lcov -c -d build/ -o coverage/lcov.info --include "*doctest/parts*" |
| |
| - name: Codecov |
| uses: codecov/codecov-action@v2 |
| with: |
| files: ./coverage/lcov.info |
| fail_ci_if_error: true |
| |
| clang-tidy: |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository |
| runs-on: ubuntu-22.04 |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install |
| run: sudo apt-get install -y ninja-build clang-tidy-14 |
| |
| - name: Generate |
| run: cmake -B build -S . -G Ninja -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D CMAKE_CXX_CLANG_TIDY="clang-tidy-14;-warnings-as-errors=*" |
| |
| - name: Build |
| run: cmake --build build |
| |
| sanitizers: |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository |
| runs-on: ubuntu-22.04 |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| sanitizers: ["address", "thread", "undefined", "integer", "implicit-conversion", "nullability", "safe-stack"] |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install |
| run: sudo apt-get install -y ninja-build |
| |
| - name: Generate |
| run: cmake -B build -S . -G Ninja -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D CMAKE_CXX_FLAGS="-fsanitize=${{ matrix.sanitizers }}" |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Test |
| run: ctest --test-dir build --no-tests=error |
| |
| ci: |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository |
| runs-on: ${{ matrix.os }} |
| |
| env: |
| CMAKE_GENERATOR: Ninja |
| ASAN_OPTIONS: strict_string_checks=true:detect_odr_violation=2:detect_stack_use_after_return=true:check_initialization_order=true:strict_init_order=true |
| TSAN_OPTIONS: force_seq_cst_atomics=1 |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| os: ["windows-2019", "windows-2022"] |
| compiler: ["cl", "clang", "clang-cl"] |
| |
| include: |
| - os: ubuntu-18.04 |
| compiler: gcc |
| version: "4.8" |
| |
| - os: ubuntu-18.04 |
| compiler: gcc |
| version: "4.9" |
| |
| - os: ubuntu-18.04 |
| compiler: gcc |
| version: "5" |
| |
| - os: ubuntu-18.04 |
| compiler: gcc |
| version: "6" |
| |
| - os: ubuntu-18.04 |
| compiler: gcc |
| version: "7" |
| |
| - os: ubuntu-18.04 |
| compiler: gcc |
| version: "8" |
| |
| - os: ubuntu-latest |
| compiler: gcc |
| version: "9" |
| |
| - os: ubuntu-latest |
| compiler: gcc |
| version: "10" |
| |
| - os: ubuntu-latest |
| compiler: gcc |
| version: "11" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "3.5" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "3.6" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "3.7" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "3.8" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "3.9" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "4.0" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "5.0" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "6.0" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "7" |
| |
| - os: ubuntu-18.04 |
| compiler: clang |
| version: "8" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "9" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "10" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "11" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "12" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "13" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "14" |
| |
| - os: ubuntu-latest |
| compiler: clang |
| version: "15" |
| |
| - os: macOS-10.15 |
| compiler: xcode |
| version: "10.3" |
| |
| - os: macOS-latest |
| compiler: xcode |
| version: "13.2.1" |
| |
| - os: macos-12 |
| compiler: xcode |
| version: "14.0.1" |
| |
| - os: macOS-latest |
| compiler: gcc |
| version: "11" |
| |
| 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 |
| |
| 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 wget gpg ca-certificates |
| |
| # clang-3.7 and earlier are not available in Bionic anymore so we get |
| # them from the Xenial repositories instead. |
| sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 |
| sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32 |
| #sudo sh -c 'wget -q -O - "https://keyserver.ubuntu.com/pks/lookup?search=0x40976EAF437D05B5&fingerprint=on&op=get" | gpg -q --dearmor - | tee "/usr/share/keyrings/dk.gpg" > /dev/null' |
| 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" |
| |
| # clang->=13 is not currently available by default |
| if [ "${{ matrix.compiler }}" = "clang" -a ${{ matrix.version }} -ge 13 ]; then |
| wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - |
| sudo add-apt-repository "deb https://apt.llvm.org/focal/ llvm-toolchain-focal-${{ matrix.version }} main" |
| fi |
| |
| if [ "${{ matrix.compiler }}" = "gcc" ]; then |
| sudo apt-get install -y g++-${{ matrix.version }} g++-${{ matrix.version }}-multilib |
| else |
| sudo apt-get install -y clang-${{ matrix.version }} g++-multilib |
| fi |
| |
| - name: Install (macOS) |
| if: runner.os == 'macOS' |
| run: | |
| brew install ninja |
| if [ "${{ matrix.compiler }}" = "xcode" ]; then |
| sudo xcode-select -switch /Applications/Xcode_${{ matrix.version }}.app |
| fi |
| |
| - name: Configure x64 |
| uses: ilammy/msvc-dev-cmd@v1 |
| |
| - name: Build & Test x64 |
| run: python3 .github/workflows/build_and_test.py ${{ runner.os }} x64 ${{ matrix.compiler }} ${{ matrix.version }} |
| |
| - name: Configure x86 |
| uses: ilammy/msvc-dev-cmd@v1 |
| with: |
| arch: x86 |
| |
| # MacOS doesn't support x86 from Xcode 10 onwards. |
| |
| - name: Build & Test x86 |
| if: runner.os == 'Linux' || runner.os == 'Windows' && matrix.compiler != 'clang-cl' |
| run: python3 .github/workflows/build_and_test.py ${{ runner.os }} x86 ${{ matrix.compiler }} ${{ matrix.version }} |
| |
| ci-min-gw: |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository |
| runs-on: windows-latest |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| configuration: ["Debug", "Release"] |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Set up MinGW |
| uses: egor-tensin/setup-mingw@v2 |
| |
| - name: Generate |
| run: cmake -B build -S . -G "MinGW Makefiles" -D CMAKE_BUILD_TYPE=${{ matrix.configuration }} |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Test |
| run: ctest --test-dir build --no-tests=error |
| |
| ci-msvs: |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository |
| runs-on: ${{ matrix.toolset == 'v143' && 'windows-2022' || 'windows-2019' }} |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| toolset: ["v140", "v141", "v142", "v143", "ClangCl"] |
| architecture: ["Win32", "x64"] |
| configuration: ["Debug", "Release"] |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Generate |
| run: cmake -B build -S . -G "${{ matrix.toolset == 'v143' && 'Visual Studio 17 2022' || 'Visual Studio 16 2019' }}" \ |
| -A ${{ matrix.architecture }} -T ${{ matrix.toolset }} |
| |
| - name: Build |
| run: cmake --build build --config ${{ matrix.configuration }} |
| |
| - name: Test |
| run: ctest -C ${{ matrix.configuration }} --test-dir build --no-tests=error |
| |
| ci-icpc: |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository |
| runs-on: ubuntu-latest |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| configuration: ["Debug", "Release"] |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install |
| run: | |
| wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo apt-key add - |
| sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" |
| sudo apt-get update |
| sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic ninja-build |
| |
| - name: Generate |
| run: | |
| . /opt/intel/oneapi/setvars.sh |
| cmake -B build -S . -G Ninja -D CMAKE_CXX_COMPILER=icc -D CMAKE_C_COMPILER=icc -D CMAKE_CXX_COMPILER=icpc -D CMAKE_BUILD_TYPE=${{ matrix.configuration }} -D CMAKE_CXX_FLAGS="-w2 -Wcheck -Werror -diag-disable=10441 -D DOCTEST_CONFIG_NO_CONTRADICTING_INLINE" |
| |
| - name: Build |
| run: | |
| . /opt/intel/oneapi/setvars.sh |
| cmake --build build --config ${{ matrix.configuration }} |
| - name: Test |
| run: | |
| . /opt/intel/oneapi/setvars.sh |
| ctest -C ${{ matrix.configuration }} --test-dir build --no-tests=error |