Skip to content

Linux build with full test matrix #194

Linux build with full test matrix

Linux build with full test matrix #194

name: Linux build with full test matrix
on:
schedule:
- cron: '0 0 * * 0'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: "gcc 8.3 (Boost 1.72)"
shortname: gcc8
tag: cosmic
cc: gcc
cxx: g++
- name: "gcc 9.3 (Boost 1.78)"
shortname: gcc9
tag: focal
cc: gcc
cxx: g++
- name: "gcc 10.3 (Boost 1.79)"
shortname: gcc10
tag: hirsute
cc: gcc
cxx: g++
- name: "gcc 11.4 (Boost 1.82)"
shortname: gcc11
tag: jammy
cc: gcc
cxx: g++
- name: "gcc 12.3 (Boost 1.86)"
shortname: gcc12
tag: lunar
cc: gcc
cxx: g++
- name: "gcc 13.x"
shortname: gcc13
tag: noble
cc: gcc
cxx: g++
- name: "gcc 14.x"
shortname: gcc14
tag: oracular
cc: gcc
cxx: g++
- name: "Clang 7 (Boost 1.72)"
shortname: clang7
tag: cosmic
cc: clang
cxx: clang++
- name: "Clang 8 (Boost 1.72)"
shortname: clang8
tag: disco
cc: clang
cxx: clang++
- name: "Clang 9 (Boost 1.74)"
shortname: clang9
tag: eoan
cc: clang
cxx: clang++
- name: "Clang 10 (Boost 1.78)"
shortname: clang10
tag: focal
cc: clang
cxx: clang++
- name: "Clang 11 (Boost 1.78)"
shortname: clang11
tag: groovy
cc: clang
cxx: clang++
- name: "Clang 12 (Boost 1.79)"
shortname: clang12
tag: hirsute
cc: clang
cxx: clang++
- name: "Clang 13 (Boost 1.79)"
shortname: clang13
tag: impish
cc: clang
cxx: clang++
- name: "Clang 14 (Boost 1.82)"
shortname: clang14
tag: jammy
cc: clang
cxx: clang++
- name: "Clang 15 (Boost 1.86)"
shortname: clang15
tag: lunar
cc: clang
cxx: clang++
- name: "Clang 16 (Boost 1.86)"
shortname: clang16
tag: mantic
cc: clang
cxx: clang++
- name: "Clang 17 (Boost 1.84)"
shortname: clang17
tag: clang-17
cc: clang
cxx: clang++
- name: "Clang 18"
shortname: clang18
tag: noble
cc: clang
cxx: clang++
- name: "Clang 19"
shortname: clang19
tag: oracular
cc: clang
cxx: clang++
- name: "C++17 mode"
shortname: c++17
tag: rolling
cc: gcc
cxx: g++
cxxflags: "-std=c++17"
- name: "C++20 mode"
shortname: c++20
tag: rolling
cc: gcc
cxx: g++
cxxflags: "-std=c++20"
- name: "C++23 mode"
shortname: c++23
tag: rolling
cc: gcc
cxx: g++
cxxflags: "-std=c++23"
- name: "Unity build enabled"
shortname: unity
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-unity-build
- name: "Intraday calculations enabled"
shortname: intraday
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-intraday
- name: "Throwing in cycles enabled"
shortname: cycles
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-throwing-in-cycles --disable-faster-lazy-objects
- name: "Indexed coupons enabled"
shortname: indexed
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-indexed-coupons
- name: "Standard Library classes enabled"
shortname: stdclasses
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-std-classes
- name: "Thread-safe observer enabled"
shortname: threadsafe
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-thread-safe-observer-pattern
- name: "Sessions enabled"
shortname: sessions
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-sessions
- name: "OpenMP enabled"
shortname: openmp
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-openmp
- name: "Parallel unit-test runner"
shortname: paralleltests
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-parallel-unit-test-runner
- name: "Null as function template"
shortname: nullfunctions
tag: rolling
cc: gcc
cxx: g++
configureflags: --enable-null-as-functions
container: ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }}
steps:
- uses: actions/checkout@v4
- name: Compiler version
run: |
${{ matrix.cc }} --version
- name: Build
run: |
./autogen.sh
./configure --disable-static ${{ matrix.configureflags }} CC="${{ matrix.cc }}" CXX="${{ matrix.cxx }}" CXXFLAGS="-O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }}"
cat ql/config.hpp
make -j 4
- name: Run tests
run: |
./test-suite/quantlib-test-suite --log_level=message
- name: Run examples
run: |
make check-examples
- name: Check global header
run: |
echo "#include <ql/quantlib.hpp>" > test1.cpp && echo "int main() { return 0; }" >> test1.cpp
echo "#include <ql/quantlib.hpp>" > test2.cpp
make install
${{ matrix.cxx }} -O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }} `quantlib-config --cflags` test1.cpp test2.cpp `quantlib-config --libs`