CI Build Tests #189
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: CI Build Tests | |
| on: | |
| push: | |
| pull_request: | |
| release: | |
| types: [published] | |
| schedule: | |
| - cron: '30 3 * * 0' | |
| jobs: | |
| coverage: | |
| name: Code Coverage & Memory Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Install Dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y lcov valgrind | |
| - name: Create Build Directory | |
| run: mkdir build | |
| - name: Configure with Coverage | |
| run: | | |
| cd build | |
| cmake -DENABLE_COVERAGE=1 -DIPV6_PARSE_LIBRARY_ONLY=OFF .. | |
| - name: Build | |
| run: | | |
| cd build | |
| cmake --build . -j | |
| - name: Run Tests | |
| run: | | |
| cd build | |
| ctest --output-on-failure | |
| - name: Run Extended Tests | |
| run: | | |
| cd build | |
| ./bin/ipv6-test | |
| ./bin/ipv6-fuzz 100 | |
| - name: Generate Coverage Report | |
| run: | | |
| cd build | |
| lcov --capture --directory . --output-file coverage.info | |
| lcov --ignore-errors unused --remove coverage.info '/usr/*' --output-file coverage.info | |
| lcov --list coverage.info | |
| - name: Upload Coverage to Codecov | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| files: ./build/coverage.info | |
| fail_ci_if_error: false | |
| verbose: true | |
| - name: Run Valgrind Memory Check | |
| run: | | |
| cd build | |
| valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --error-exitcode=1 --suppressions=../valgrind.supp ./bin/ipv6-test | |
| valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --error-exitcode=1 --suppressions=../valgrind.supp ./bin/ipv6-fuzz 100 | |
| cpp_build: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| CC: gcc-12 | |
| CXX: g++-12 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: gcc-12 | |
| - os: ubuntu-latest | |
| CC: gcc-13 | |
| CXX: g++-13 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: gcc-13 | |
| - os: ubuntu-latest | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: gcc-14 | |
| - os: ubuntu-latest | |
| CC: clang-15 | |
| CXX: clang++-15 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: clang-15 | |
| - os: ubuntu-latest | |
| CC: clang-16 | |
| CXX: clang++-16 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: clang-16 | |
| - os: ubuntu-latest | |
| CC: clang-17 | |
| CXX: clang++-17 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: clang-17 | |
| - os: ubuntu-latest | |
| CC: clang-18 | |
| CXX: clang++-18 | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: clang-18 | |
| - os: macos-latest | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: AppleClang | |
| - os: windows-latest | |
| CMAKE_CMD: cmake .. -DIPV6_PARSE_LIBRARY_ONLY=OFF | |
| NAME: msvc | |
| name: ${{ matrix.os }}-${{ matrix.NAME }} - C++ Test | |
| env: | |
| MSBUILD_PATH: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: recursive | |
| - name: Create Build Directory | |
| run: mkdir build | |
| - name: Install Dependencies (Linux) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt update | |
| sudo apt install -y ${{ matrix.CC }} || echo "Compiler already installed" | |
| if [[ "${{ matrix.CXX }}" != *"clang"* ]]; then sudo apt install -y ${{ matrix.CXX }} || echo "C++ compiler already installed"; fi | |
| - name: Execute CMake Process | |
| env: | |
| CC: ${{ matrix.CC }} | |
| CXX: ${{ matrix.CXX }} | |
| run: | | |
| cd build | |
| ${{ matrix.CMAKE_CMD }} | |
| - name: Build Project | |
| run: | | |
| cd build | |
| cmake --build . -j --config Release | |
| - name: Run Tests | |
| run: | | |
| cd build | |
| ctest --output-on-failure -j -C Release | |
| test-nodejs: | |
| name: Node.js Tests and Linting | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Run ESLint | |
| run: npm run lint | |
| - name: Setup Emscripten | |
| uses: mymindstorm/setup-emsdk@v14 | |
| with: | |
| version: latest | |
| - name: Build WASM | |
| run: ./build_wasm.sh | |
| - name: Validate build output | |
| run: npm run validate | |
| - name: Run Node.js tests | |
| run: npm run test:node | |
| - name: Run WASM tests | |
| run: npm run test:wasm | |
| - name: Run API tests | |
| run: npm run test:api | |
| test-conan: | |
| name: Conan Package Test | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Conan | |
| run: | | |
| pip install conan | |
| conan profile detect --force | |
| - name: Test Conan package | |
| run: conan create . --build=missing |