Skip to content

CI Build Tests

CI Build Tests #189

Workflow file for this run

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