Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
7fea0de
Use debug-full and release presets for CI, create CMakePresets.json t…
fabiomarcellusdev Jun 20, 2026
784e61b
Fix referenced Conan-generated paths in CMakePresets.json
fabiomarcellusdev Jun 20, 2026
ccd06be
Fix 2 issues causing CI to fail
fabiomarcellusdev Jun 20, 2026
17ecaf4
Add workflow_dispatch to ci.yml
fabiomarcellusdev Jun 20, 2026
4f3b701
Fix value for Standard in .clang-format
fabiomarcellusdev Jun 20, 2026
257de10
Fix more issues causing CI failure
fabiomarcellusdev Jun 20, 2026
1378111
Attempt to fix issue with ReflowComments value
fabiomarcellusdev Jun 20, 2026
708eedc
Add version to the --ignore-errors flag in both lcov commands
fabiomarcellusdev Jun 20, 2026
0714ffc
Fix gcov version mismatch by using compiler-matched gcov tool
fabiomarcellusdev Jun 20, 2026
e75e838
Fix lcov issues causing CI to fail
fabiomarcellusdev Jun 20, 2026
53a248c
Use target_compile_features per target and CI verification for C++23 …
fabiomarcellusdev Jun 20, 2026
a697097
Force C++23 for all dependencies in conanfile.py + explicitly pass C+…
fabiomarcellusdev Jun 20, 2026
43aad86
Set C++23 in conan build profile
fabiomarcellusdev Jun 20, 2026
b0cb07b
Revert "Set C++23 in conan build profile"
fabiomarcellusdev Jun 20, 2026
9cfa3d3
Add explicit step to install GCC13 on linux
fabiomarcellusdev Jun 20, 2026
7b4819d
Revert "Add explicit step to install GCC13 on linux"
fabiomarcellusdev Jun 20, 2026
524439d
Restrict lcov to only scan project's source and test directories, exc…
fabiomarcellusdev Jun 20, 2026
63e7a13
Update gtest to 1.17.0
fabiomarcellusdev Jun 20, 2026
7cdb238
Update root CMakeLists.txt to enforce strict C++23
fabiomarcellusdev Jun 20, 2026
ffe0119
Separate build job and coverage job for CI to prevent conflicts betwe…
fabiomarcellusdev Jun 21, 2026
88388b8
Remove command that destroyed data before it was ready + add ignore e…
fabiomarcellusdev Jun 21, 2026
3b08c03
Add fix attempts
fabiomarcellusdev Jun 21, 2026
ee82869
ci: use gcc for coverage job so lcov finds .gcda files
fabiomarcellusdev Jun 21, 2026
dd7c39b
Merge pull request #3 from fabiomarcellusdev/coverage/fix-lcov
fabiomarcellusdev Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
Language: Cpp
BasedOnStyle: LLVM
Standard: c++23
Standard: Auto

IndentWidth: 4
TabWidth: 4
Expand All @@ -14,7 +14,7 @@ IndentGotoLabels: true
NamespaceIndentation: None
AccessModifierOffset: -4

AlignAfterOpenBracket: Align
AlignAfterOpenBracket: true
AlignConsecutiveAssignments: None
AlignConsecutiveDeclarations: None
AlignConsecutiveMacros: None
Expand Down
78 changes: 73 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:

jobs:
build:
Expand All @@ -13,7 +14,7 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest]
compiler: [gcc, clang]
build_type: [Release, Debug]
preset: [release-strict, debug-sanitizers]
exclude:
- os: macos-latest
compiler: gcc
Expand All @@ -31,16 +32,83 @@ jobs:
run: conan profile detect --force

- name: Install dependencies
run: conan install . --build=missing -s build_type=${{ matrix.build_type }}
run: |
BUILD_TYPE=$(echo "${{ matrix.preset }}" | grep -q "release" && echo "Release" || echo "Debug")
conan install . --build=missing -s build_type=$BUILD_TYPE -s compiler.cppstd=23

- name: Configure CMake
run: cmake --preset conan-${{ matrix.build_type == 'Release' && 'release' || 'debug' }}
run: cmake --preset ${{ matrix.preset }}
env:
CC: ${{ matrix.compiler == 'gcc' && 'gcc' || 'clang' }}
CXX: ${{ matrix.compiler == 'gcc' && 'g++' || 'clang++' }}

- name: Verify C++23 standard
run: |
echo "=== Compiler Information ==="
${{ matrix.compiler == 'gcc' && 'g++' || 'clang++' }} --version
echo ""
echo "=== Checking C++ standard in compile commands ==="
if [ -f "build/${{ matrix.preset }}/compile_commands.json" ]; then
# Extract and display C++ standard flags
grep -o '\-std=[^ " ]*' "build/${{ matrix.preset }}/compile_commands.json" | sort -u || echo "No -std flag found"
# Verify C++23 is being used
if grep -q '\-std=c++2[3b]' "build/${{ matrix.preset }}/compile_commands.json"; then
echo "✓ C++23 standard verified"
else
echo "✗ C++23 standard NOT found in compile commands"
exit 1
fi
else
echo "Warning: compile_commands.json not found"
fi

- name: Build
run: cmake --build --preset ${{ matrix.preset }}

- name: Test
run: ctest --preset ${{ matrix.preset }} --output-on-failure

coverage:
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Conan
run: pipx install conan

- name: Install lcov
run: sudo apt-get install -y lcov

- name: Configure Conan profile
run: conan profile detect --force

- name: Install dependencies
run: conan install . --build=missing -s build_type=Debug -s compiler.cppstd=23

- name: Configure CMake
run: cmake --preset debug-coverage
env:
CC: gcc
CXX: g++

- name: Build
run: cmake --build --preset conan-${{ matrix.build_type == 'Release' && 'release' || 'debug' }}
run: |
find build -name "*.gcda" -delete 2>/dev/null || true
find build -name "*.gcno" -delete 2>/dev/null || true
cmake --build --preset debug-coverage

- name: Test
run: ctest --preset conan-${{ matrix.build_type == 'Release' && 'release' || 'debug' }} --output-on-failure
run: ctest --preset debug-coverage --output-on-failure

- name: Generate coverage report
run: cmake --build --preset debug-coverage --target coverage

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./build/debug-coverage/coverage/coverage_filtered.info
fail_ci_if_error: true
verbose: true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ CMakeFiles/
cmake_install.cmake
Makefile
compile_commands.json
CMakeUserPresets.json

# OS files
.DS_Store
Expand Down
9 changes: 7 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ project(

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF) # Ensures strict C++23 standard

# Force gtest targets to compile with the same C++23 standard
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
set(BUILD_GTEST ON CACHE BOOL "" FORCE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

if(MSVC)
Expand All @@ -19,10 +23,11 @@ else()
endif()

include(cmake/ConanSetup.cmake)
include(cmake/LintTargets.cmake)
include(cmake/CodeCoverage.cmake)
include(cmake/Sanitizers.cmake)

enable_testing()
add_subdirectory(src)
add_subdirectory(tests)

include(cmake/LintTargets.cmake)
146 changes: 146 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 27,
"patch": 0
},
"configurePresets": [
{
"name": "base",
"hidden": true,
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "release",
"displayName": "Release",
"description": "Optimized release build",
"inherits": "base",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/build/Release/generators/conan_toolchain.cmake"
}
},
{
"name": "debug",
"displayName": "Debug",
"description": "Debug build with full symbols",
"inherits": "base",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/build/Debug/generators/conan_toolchain.cmake"
}
},
{
"name": "debug-sanitizers",
"displayName": "Debug with Sanitizers",
"description": "Debug build with AddressSanitizer and UndefinedBehaviorSanitizer",
"inherits": "debug",
"cacheVariables": {
"ENABLE_SANITIZERS": "ON"
}
},
{
"name": "debug-coverage",
"displayName": "Debug with Coverage",
"description": "Debug build with code coverage instrumentation",
"inherits": "debug",
"cacheVariables": {
"ENABLE_COVERAGE": "ON"
}
},
{
"name": "debug-full",
"displayName": "Debug Full Check",
"description": "Debug build with sanitizers, coverage, and linting",
"inherits": "debug",
"cacheVariables": {
"ENABLE_SANITIZERS": "ON",
"ENABLE_COVERAGE": "ON",
"ENABLE_LINTING": "ON"
}
},
{
"name": "release-strict",
"displayName": "Release with Strict Linting",
"description": "Release build with linting enforced during compilation",
"inherits": "release",
"cacheVariables": {
"ENABLE_LINTING": "ON"
}
}
],
"buildPresets": [
{
"name": "release",
"configurePreset": "release"
},
{
"name": "debug",
"configurePreset": "debug"
},
{
"name": "debug-sanitizers",
"configurePreset": "debug-sanitizers"
},
{
"name": "debug-coverage",
"configurePreset": "debug-coverage"
},
{
"name": "debug-full",
"configurePreset": "debug-full"
},
{
"name": "release-strict",
"configurePreset": "release-strict"
}
],
"testPresets": [
{
"name": "release",
"configurePreset": "release",
"output": {
"outputOnFailure": true
}
},
{
"name": "debug",
"configurePreset": "debug",
"output": {
"outputOnFailure": true
}
},
{
"name": "debug-sanitizers",
"configurePreset": "debug-sanitizers",
"output": {
"outputOnFailure": true
}
},
{
"name": "debug-coverage",
"configurePreset": "debug-coverage",
"output": {
"outputOnFailure": true
}
},
{
"name": "debug-full",
"configurePreset": "debug-full",
"output": {
"outputOnFailure": true
}
},
{
"name": "release-strict",
"configurePreset": "release-strict",
"output": {
"outputOnFailure": true
}
}
]
}
Loading
Loading