diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..3f11c8af --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,51 @@ +name: Coverage + +on: + push: + branches: + - develop + +jobs: + posix: + defaults: + run: + shell: bash + + runs-on: ubuntu-22.04 + env: + CXX: g++-11 + CXXFLAGS: -g -O0 -std=c++20 --coverage -fkeep-inline-functions -fkeep-static-functions + LDFLAGS: --coverage + CMAKE_BUILD_PARALLEL_LEVEL: 4 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install dependencies + run: sudo apt-get --no-install-recommends -y install cmake lcov g++-11 redis-server python3 libgd-perl + + - name: Setup Boost + run: ./tools/ci.py setup-boost --source-dir=$(pwd) + + - name: Build Boost + run: ./tools/ci.py build-b2-distro --toolset=gcc-11 + + # Having our library there confuses the coverage reports + - name: Remove Boost.Redis from the b2 distro + run: rm -rf ~/boost-b2-distro/include/boost/redis + + - name: Run CMake + run: cmake -DCMAKE_PREFIX_PATH=$HOME/boost-b2-distro --preset coverage . + + - name: Build + run: cmake --build --preset coverage + + - name: Test + run: ctest --preset coverage + + - name: Make the coverage file + run: cmake --build --preset coverage --target coverage + + - name: Upload to codecov + run: | + bash <(curl -s https://codecov.io/bash) -f ./build/coverage/coverage.info diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..34b32648 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,178 @@ +{ + "version": 2, + "cmakeMinimumRequired": { + "major": 3, + "minor": 14, + "patch": 0 + }, + "configurePresets": [ + { + "name": "cmake-pedantic", + "hidden": true, + "warnings": { + "dev": true, + "deprecated": true, + "uninitialized": false, + "unusedCli": true, + "systemVars": false + }, + "errors": { + "dev": true, + "deprecated": true + } + }, + { + "name": "coverage", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/coverage", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Coverage", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra", + "CMAKE_CXX_FLAGS_COVERAGE": "-Og -g --coverage -fkeep-inline-functions -fkeep-static-functions", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "CMAKE_EXE_LINKER_FLAGS_COVERAGE": "--coverage", + "CMAKE_SHARED_LINKER_FLAGS_COVERAGE": "--coverage", + "PROJECT_BINARY_DIR": "${sourceDir}/build/coverage", + "COVERAGE_HTML_COMMAND": "" + } + }, + { + "name": "g++-11", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/g++-11", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra -fsanitize=address", + "CMAKE_CXX_COMPILER": "g++-11", + "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=address", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "PROJECT_BINARY_DIR": "${sourceDir}/build/g++-11" + } + }, + { + "name": "g++-11-release", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/g++-11-release", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra", + "CMAKE_CXX_COMPILER": "g++-11", + "CMAKE_SHARED_LINKER_FLAGS": "", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "PROJECT_BINARY_DIR": "${sourceDir}/build/g++-11-release" + } + }, + { + "name": "clang++-13", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/clang++-13", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra -fsanitize=address", + "CMAKE_CXX_COMPILER": "clang++-13", + "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=address", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "PROJECT_BINARY_DIR": "${sourceDir}/build/clang++-13" + } + }, + { + "name": "clang++-14", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/clang++-14", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra -fsanitize=address", + "CMAKE_CXX_COMPILER": "clang++-14", + "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=address", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "PROJECT_BINARY_DIR": "${sourceDir}/build/clang++-14" + } + }, + { + "name": "libc++-14-cpp17", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/libc++-14-cpp17", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra -stdlib=libc++ -std=c++17", + "CMAKE_EXE_LINKER_FLAGS": "-lc++", + "CMAKE_CXX_COMPILER": "clang++-14", + "CMAKE_SHARED_LINKER_FLAGS": "", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "PROJECT_BINARY_DIR": "${sourceDir}/build/libc++-14-cpp17" + } + }, + { + "name": "libc++-14-cpp20", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["cmake-pedantic"], + "binaryDir": "${sourceDir}/build/libc++-14-cpp20", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_CXX_FLAGS": "-Wall -Wextra -stdlib=libc++ -std=c++17", + "CMAKE_EXE_LINKER_FLAGS": "-lc++", + "CMAKE_CXX_COMPILER": "clang++-14", + "CMAKE_SHARED_LINKER_FLAGS": "", + "CMAKE_CXX_STANDARD_REQUIRED": "ON", + "PROJECT_BINARY_DIR": "${sourceDir}/build/libc++-14-cpp20" + } + }, + { + "name": "clang-tidy", + "generator": "Unix Makefiles", + "hidden": false, + "inherits": ["g++-11"], + "binaryDir": "${sourceDir}/build/clang-tidy", + "cacheVariables": { + "CMAKE_CXX_CLANG_TIDY": "clang-tidy;--header-filter=${sourceDir}/include/*", + "CMAKE_CXX_STANDARD": "20" + } + } + ], + "buildPresets": [ + { "name": "coverage", "configurePreset": "coverage" }, + { "name": "g++-11", "configurePreset": "g++-11" }, + { "name": "g++-11-release", "configurePreset": "g++-11-release" }, + { "name": "clang++-13", "configurePreset": "clang++-13" }, + { "name": "clang++-14", "configurePreset": "clang++-14" }, + { "name": "libc++-14-cpp17", "configurePreset": "libc++-14-cpp17" }, + { "name": "libc++-14-cpp20", "configurePreset": "libc++-14-cpp20" }, + { "name": "clang-tidy", "configurePreset": "clang-tidy" } + ], + "testPresets": [ + { + "name": "test", + "hidden": true, + "output": {"outputOnFailure": true}, + "execution": {"noTestsAction": "error", "stopOnFailure": true} + }, + { "name": "coverage", "configurePreset": "coverage", "inherits": ["test"] }, + { "name": "g++-11", "configurePreset": "g++-11", "inherits": ["test"] }, + { "name": "g++-11-release", "configurePreset": "g++-11-release", "inherits": ["test"] }, + { "name": "clang++-13", "configurePreset": "clang++-13", "inherits": ["test"] }, + { "name": "clang++-14", "configurePreset": "clang++-14", "inherits": ["test"] }, + { "name": "libc++-14-cpp17", "configurePreset": "libc++-14-cpp17", "inherits": ["test"] }, + { "name": "libc++-14-cpp20", "configurePreset": "libc++-14-cpp20", "inherits": ["test"] }, + { "name": "clang-tidy", "configurePreset": "clang-tidy", "inherits": ["test"] } + ] +}