diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 58a7d722..0d61656c 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -10,7 +10,7 @@ on: jobs: unit-test: name: Build and run unit test - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout repository @@ -19,9 +19,29 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y libboost-all-dev libfmt-dev + sudo apt-get install -y libboost-all-dev libfmt-dev lcov - name: Run unit test run: | cd extras/test/unit ./test.sh + + - name: Measure test coverage + run: | + cd extras/test/unit + ./coverage.sh + + - name: Upload coverage report as artifact + uses: actions/upload-artifact@v4 + with: + name: coverage_report + path: extras/test/unit/lcov.report + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: extras/test/unit/lcov.report + destination_dir: coverage + keep_files: true diff --git a/extras/test/unit/.gitignore b/extras/test/unit/.gitignore index 567609b1..b9f0c3b0 100644 --- a/extras/test/unit/.gitignore +++ b/extras/test/unit/.gitignore @@ -1 +1,2 @@ build/ +lcov* diff --git a/extras/test/unit/CMakeLists.txt b/extras/test/unit/CMakeLists.txt index 300b8869..a3943e84 100644 --- a/extras/test/unit/CMakeLists.txt +++ b/extras/test/unit/CMakeLists.txt @@ -18,11 +18,13 @@ add_executable(${PROJECT_NAME} ${TEST_SOURCES}) target_include_directories(${PROJECT_NAME} PUBLIC include) # link RadioLib -target_link_libraries(${PROJECT_NAME} RadioLib fmt) +target_link_libraries(${PROJECT_NAME} RadioLib fmt gcov) # set target properties and options set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 20) -target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra) +set(BUILD_FLAGS -Wall -Wextra -fprofile-arcs -ftest-coverage -O0) +target_compile_options(${PROJECT_NAME} PRIVATE ${BUILD_FLAGS}) +target_compile_options(RadioLib PRIVATE ${BUILD_FLAGS}) # set RadioLib debug #target_compile_definitions(RadioLib PUBLIC RADIOLIB_DEBUG_BASIC RADIOLIB_DEBUG_SPI RADIOLIB_DEBUG_PROTOCOL) diff --git a/extras/test/unit/coverage.sh b/extras/test/unit/coverage.sh new file mode 100755 index 00000000..c2c3c9dd --- /dev/null +++ b/extras/test/unit/coverage.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e +filename="lcov" +rm -rf $filename.* +lcov --capture --directory build --output-file "${filename}.info" + +# filter out boost and C++ standard library +lcov --remove "${filename}.info" "/usr/*/boost/*" "/usr/include/c++/*" --output-file "${filename}.info" + +# generate HTML +genhtml "${filename}.info" --output-directory "${filename}.report" diff --git a/src/RadioLib.h b/src/RadioLib.h index adc6854a..3c362e11 100644 --- a/src/RadioLib.h +++ b/src/RadioLib.h @@ -37,6 +37,7 @@ - PhysicalLayer - FSK and LoRa radio modules \see https://github.com/jgromes/RadioLib + \see https://jgromes.github.io/RadioLib/coverage/src/index.html \copyright Copyright (c) 2019 Jan Gromes */