Merge pull request #44 from openSVM/copilot/fix-43 #45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: C++ SDK CI | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| paths: | |
| - 'cpp_sdk/**' | |
| - '.github/workflows/cpp_sdk.yml' | |
| pull_request: | |
| branches: [ main, develop ] | |
| paths: | |
| - 'cpp_sdk/**' | |
| - '.github/workflows/cpp_sdk.yml' | |
| jobs: | |
| test: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| build-type: [Debug, Release] | |
| compiler: [gcc, clang, msvc] | |
| exclude: | |
| - os: windows-latest | |
| compiler: gcc | |
| - os: macos-latest | |
| compiler: gcc | |
| - os: ubuntu-latest | |
| compiler: msvc | |
| - os: macos-latest | |
| compiler: msvc | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install libsodium | |
| if: matrix.os == 'ubuntu-latest' | |
| run: sudo apt-get update && sudo apt-get install -y libsodium-dev lcov | |
| - name: Install dependencies (Ubuntu) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get install -y cmake ninja-build pkg-config valgrind | |
| if [ "${{ matrix.compiler }}" = "clang" ]; then | |
| sudo apt-get install -y clang-15 | |
| echo "CC=clang-15" >> $GITHUB_ENV | |
| echo "CXX=clang++-15" >> $GITHUB_ENV | |
| fi | |
| - name: Install dependencies (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: | | |
| brew install cmake ninja libsodium pkg-config lcov | |
| BREW_PREFIX=$(brew --prefix) | |
| echo "PKG_CONFIG_PATH=${BREW_PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}" >> $GITHUB_ENV | |
| echo "CMAKE_PREFIX_PATH=${BREW_PREFIX}:${CMAKE_PREFIX_PATH}" >> $GITHUB_ENV | |
| echo "LIBRARY_PATH=${BREW_PREFIX}/lib:${LIBRARY_PATH}" >> $GITHUB_ENV | |
| echo "LD_LIBRARY_PATH=${BREW_PREFIX}/lib:${LD_LIBRARY_PATH}" >> $GITHUB_ENV | |
| echo "DYLD_LIBRARY_PATH=${BREW_PREFIX}/lib:${DYLD_LIBRARY_PATH}" >> $GITHUB_ENV | |
| if [ "${{ matrix.compiler }}" = "clang" ]; then | |
| echo "CC=clang" >> $GITHUB_ENV | |
| echo "CXX=clang++" >> $GITHUB_ENV | |
| fi | |
| - name: Install dependencies (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| timeout-minutes: 15 | |
| run: | | |
| # Install basic tools | |
| choco install cmake ninja pkgconfiglite --yes | |
| # Use the pre-installed vcpkg on GitHub Actions | |
| $vcpkgPath = "C:\vcpkg" | |
| if (Test-Path $vcpkgPath) { | |
| echo "Using pre-installed vcpkg at $vcpkgPath" | |
| } else { | |
| echo "Installing fresh vcpkg..." | |
| git clone https://github.com/Microsoft/vcpkg.git C:\vcpkg | |
| C:\vcpkg\bootstrap-vcpkg.bat | |
| } | |
| # Install required packages | |
| C:\vcpkg\vcpkg.exe install libsodium:x64-windows pkgconf:x64-windows gtest:x64-windows | |
| # Set environment variables | |
| echo "CMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" >> $env:GITHUB_ENV | |
| echo "PKG_CONFIG_PATH=C:/vcpkg/installed/x64-windows/lib/pkgconfig" >> $env:GITHUB_ENV | |
| echo "VCPKG_ROOT=C:/vcpkg" >> $env:GITHUB_ENV | |
| if ("${{ matrix.compiler }}" -eq "msvc") { | |
| echo "Using MSVC compiler" | |
| } else { | |
| echo "Using Clang compiler" | |
| echo "CC=clang" >> $env:GITHUB_ENV | |
| echo "CXX=clang++" >> $env:GITHUB_ENV | |
| } | |
| - name: Install Google Test (Ubuntu) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get install -y libgtest-dev | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo make | |
| sudo cp lib/*.a /usr/lib | |
| - name: Install Google Test (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: | | |
| git clone https://github.com/google/googletest.git | |
| cd googletest | |
| mkdir build && cd build | |
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} | |
| cmake --build . --config ${{ matrix.build-type }} | |
| sudo cmake --install . --config ${{ matrix.build-type }} | |
| - name: Configure CMake (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| cd cpp_sdk | |
| New-Item -ItemType Directory -Force -Path build | |
| cd build | |
| # Debug output | |
| echo "CMAKE_TOOLCHAIN_FILE: $env:CMAKE_TOOLCHAIN_FILE" | |
| echo "PKG_CONFIG_PATH: $env:PKG_CONFIG_PATH" | |
| echo "VCPKG_ROOT: $env:VCPKG_ROOT" | |
| if ("${{ matrix.compiler }}" -eq "msvc") { | |
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_TOOLCHAIN_FILE="$env:CMAKE_TOOLCHAIN_FILE" -DCMAKE_VERBOSE_MAKEFILE=ON | |
| } else { | |
| cmake .. -G"Ninja" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_TOOLCHAIN_FILE="$env:CMAKE_TOOLCHAIN_FILE" -DCMAKE_VERBOSE_MAKEFILE=ON | |
| } | |
| env: | |
| CI: true | |
| - name: Configure CMake (Unix) | |
| if: matrix.os != 'windows-latest' | |
| shell: bash | |
| run: | | |
| cd cpp_sdk | |
| mkdir build && cd build | |
| cmake .. -GNinja -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DENABLE_SANITIZERS=ON | |
| env: | |
| CI: true | |
| - name: Build (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| cd cpp_sdk/build | |
| if ("${{ matrix.compiler }}" -eq "msvc") { | |
| cmake --build . --config ${{ matrix.build-type }} | |
| } else { | |
| ninja | |
| } | |
| - name: Build (Unix) | |
| if: matrix.os != 'windows-latest' | |
| shell: bash | |
| run: | | |
| cd cpp_sdk/build | |
| ninja | |
| - name: Run tests (Windows) | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| cd cpp_sdk/build | |
| ctest --verbose --output-on-failure --build-config ${{ matrix.build-type }} | |
| - name: Run tests (Unix) | |
| if: matrix.os != 'windows-latest' | |
| shell: bash | |
| run: | | |
| cd cpp_sdk/build | |
| ctest --verbose --output-on-failure | |
| - name: Generate coverage report (Debug builds only) | |
| if: matrix.build-type == 'Debug' && matrix.os == 'ubuntu-latest' && matrix.compiler == 'gcc' | |
| run: | | |
| cd cpp_sdk/build | |
| ninja coverage | |
| - name: Debug coverage files | |
| if: matrix.build-type == 'Debug' && matrix.os == 'ubuntu-latest' && matrix.compiler == 'gcc' | |
| run: | | |
| echo "Listing files in cpp_sdk/build:" | |
| ls -la cpp_sdk/build/ | |
| echo "Looking for coverage files:" | |
| find cpp_sdk/build/ -name "*.info" -o -name "*.gcno" -o -name "*.gcda" | head -20 | |
| - name: Upload coverage to Codecov | |
| if: matrix.build-type == 'Debug' && matrix.os == 'ubuntu-latest' && matrix.compiler == 'gcc' | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| file: ./cpp_sdk/build/coverage.info | |
| flags: cpp_sdk | |
| name: cpp-sdk-coverage | |
| fail_ci_if_error: true | |
| memory-safety: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Clean build directories | |
| run: | | |
| cd cpp_sdk | |
| rm -rf build-asan build-valgrind | |
| - name: Install libsodium | |
| run: sudo apt-get update && sudo apt-get install -y libsodium-dev lcov | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get install -y cmake ninja-build pkg-config valgrind clang-15 | |
| echo "CC=clang-15" >> $GITHUB_ENV | |
| echo "CXX=clang++-15" >> $GITHUB_ENV | |
| - name: Install Google Test | |
| run: | | |
| sudo apt-get install -y libgtest-dev | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo make | |
| sudo cp lib/*.a /usr/lib | |
| - name: Configure with AddressSanitizer | |
| run: | | |
| cd cpp_sdk | |
| mkdir -p build-asan && cd build-asan | |
| cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug -DENABLE_SANITIZERS=ON | |
| - name: Build with AddressSanitizer | |
| run: | | |
| cd cpp_sdk/build-asan | |
| ninja | |
| - name: Test with AddressSanitizer | |
| run: | | |
| cd cpp_sdk/build-asan | |
| ninja test-sanitizers | |
| - name: Configure with Valgrind | |
| run: | | |
| cd cpp_sdk | |
| mkdir -p build-valgrind && cd build-valgrind | |
| cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug -DENABLE_VALGRIND=ON | |
| - name: Build with Valgrind | |
| run: | | |
| cd cpp_sdk/build-valgrind | |
| ninja | |
| - name: Test with Valgrind | |
| run: | | |
| cd cpp_sdk/build-valgrind | |
| ninja test-valgrind | |
| static-analysis: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install libsodium | |
| run: sudo apt-get update && sudo apt-get install -y libsodium-dev lcov | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get install -y cmake ninja-build pkg-config clang-15 clang-tidy-15 clang-format-15 # Add clang-format-15 here | |
| echo "CC=clang-15" >> $GITHUB_ENV | |
| echo "CXX=clang++-15" >> $GITHUB_ENV | |
| - name: Install Google Test | |
| run: | | |
| sudo apt-get install -y libgtest-dev | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo make | |
| sudo cp lib/*.a /usr/lib | |
| - name: Configure | |
| run: | | |
| cd cpp_sdk | |
| mkdir build && cd build | |
| cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | |
| - name: Run clang-tidy | |
| run: | | |
| cd cpp_sdk | |
| clang-tidy-15 src/*.cpp -p build/ --warnings-as-errors=* | |
| - name: Run clang-format check | |
| run: | | |
| cd cpp_sdk | |
| find . -name "*.cpp" -o -name "*.hpp" | grep -v "^./build" | xargs clang-format-15 --dry-run --Werror | |
| documentation: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install libsodium | |
| run: sudo apt-get update && sudo apt-get install -y libsodium-dev lcov | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get install -y doxygen graphviz libgtest-dev | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo make | |
| sudo cp lib/*.a /usr/lib | |
| - name: Generate documentation | |
| run: | | |
| cd cpp_sdk | |
| mkdir build && cd build | |
| cmake .. -GNinja | |
| ninja docs | |
| - name: Upload documentation | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: cpp-sdk-docs | |
| path: cpp_sdk/build/docs/html/ |