diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 000000000..6ec8b5822 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,44 @@ +# +# Builds run on every pull request and every push to the repo. +# + +name: CodeCoverage +on: [push, pull_request] + +env: + GITHUB_REPO: pmem/rpma + # use GitHub Container Registry as a repository of docker images + GH_CR_ADDR: ghcr.io + DOCKER_REPO: ghcr.io/pmem/rpma + # use org's Private Access Token to log in to GitHub Container Registry + GH_CR_USER: ${{ secrets.GH_CR_USER }} + GH_CR_PAT: ${{ secrets.GH_CR_PAT }} + HOST_WORKDIR: /home/runner/work/rpma/rpma + WORKDIR: utils/docker + TYPE: normal + OS: ubuntu + OS_VER: latest-with-rdma-core-45 + CC: gcc + TESTS_COVERAGE: 1 + +jobs: + linux: + name: Linux + runs-on: ubuntu-latest + steps: + - name: Clone the git repo + uses: actions/checkout@v3 + + - name: Pull or rebuild the image + run: cd $WORKDIR && ${{ matrix.CONFIG }} ./pull-or-rebuild-image.sh + + - name: Run the build + run: cd $WORKDIR && ${{ matrix.CONFIG }} ./build.sh + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + gcov: true + root_dir: /home/runner/work/rpma/ + working-directory: /home/runner/work/rpma/ + verbose: true diff --git a/.github/workflows/on_pull_request.yml b/.github/workflows/on_pull_request.yml index 5c313d887..b5692170f 100644 --- a/.github/workflows/on_pull_request.yml +++ b/.github/workflows/on_pull_request.yml @@ -24,14 +24,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - CONFIG: ["N=1 OS=ubuntu OS_VER=latest CC=gcc", # to be reverted: TESTS_COVERAGE=1", + CONFIG: ["N=1 OS=ubuntu OS_VER=latest CC=gcc", "N=2 OS=ubuntu OS_VER=latest CC=clang PUSH_IMAGE=1", "N=3 OS=fedora OS_VER=latest CC=gcc PUSH_IMAGE=1", "N=4 OS=fedora OS_VER=latest CC=clang AUTO_DOC_UPDATE=1", "N=5 OS=rockylinux OS_VER=9 CC=gcc PUSH_IMAGE=1", "N=6 OS=rockylinux OS_VER=8 CC=gcc PUSH_IMAGE=1", # Ubuntu-latest with rdma-core v45.0 installed from sources - "N=7 OS=ubuntu OS_VER=latest-with-rdma-core-45 CC=gcc TESTS_COVERAGE=1", + "N=7 OS=ubuntu OS_VER=latest-with-rdma-core-45 CC=gcc", "N=8 OS=ubuntu OS_VER=latest-with-rdma-core-45 CC=clang PUSH_IMAGE=1", # Fedora-latest with rdma-core v45.0 installed from sources "N=9 OS=fedora OS_VER=latest-with-rdma-core-45 CC=gcc PUSH_IMAGE=1", diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ee0dd1e7..7f205d1ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -252,7 +252,7 @@ if(DEBUG_USE_UBSAN) endif() if(TESTS_COVERAGE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -coverage") + set(CMAKE_C_FLAGS "-O0 --coverage ${CMAKE_C_FLAGS}") endif() if(BUILD_DEVELOPER_MODE) diff --git a/utils/docker/build.sh b/utils/docker/build.sh index b715186c1..b75378565 100755 --- a/utils/docker/build.sh +++ b/utils/docker/build.sh @@ -44,10 +44,6 @@ if [[ "$command" == "" ]]; then esac fi -if [ "$TESTS_COVERAGE" == "1" ]; then - docker_opts="${docker_opts} `bash <(curl -s https://codecov.io/env)`"; -fi - if [ -n "$DNS_SERVER" ]; then DNS_SETTING=" --dns=$DNS_SERVER "; fi if [ "$AUTO_DOC_UPDATE" == "1" ]; then @@ -75,7 +71,6 @@ echo Building ${IMG_VER}-${OS}-${OS_VER} # - working directory set (-w) docker run --privileged=true --name=$containerName -i $TTY \ $DNS_SETTING \ - ${docker_opts} \ --env http_proxy=$http_proxy \ --env https_proxy=$https_proxy \ --env AUTO_DOC_UPDATE=$AUTO_DOC_UPDATE \ diff --git a/utils/docker/run-build.sh b/utils/docker/run-build.sh index c86bd6e1a..ca513d084 100755 --- a/utils/docker/run-build.sh +++ b/utils/docker/run-build.sh @@ -54,32 +54,6 @@ function sudo_password() { echo $USERPASS | sudo -S $* } -function upload_codecov() { - printf "\n$(tput setaf 1)$(tput setab 7)COVERAGE ${FUNCNAME[0]} START$(tput sgr 0)\n" - - # set proper gcov command - clang_used=$($CMAKE -LA -N . | grep CMAKE_C_COMPILER | grep clang | wc -c) - if [[ $clang_used > 0 ]]; then - gcovexe="llvm-cov gcov" - else - gcovexe="gcov" - fi - - # run gcov exe, using their bash (remove parsed coverage files, set flag and exit 1 if not successful) - # we rely on parsed report on codecov.io; the output is quite long, hence it's disabled using -X flag - /opt/scripts/codecov -c -F $1 -Z -x "$gcovexe" -X "gcovout" - - printf "check for any leftover gcov files\n" - leftover_files=$(find . -name "*.gcov" | wc -l) - if [[ $leftover_files > 0 ]]; then - # display found files and exit with error (they all should be parsed) - find . -name "*.gcov" - return 1 - fi - - printf "$(tput setaf 1)$(tput setab 7)COVERAGE ${FUNCNAME[0]} END$(tput sgr 0)\n\n" -} - function compile_example_standalone() { rm -rf $EXAMPLE_TEST_DIR mkdir $EXAMPLE_TEST_DIR @@ -157,13 +131,14 @@ $CMAKE .. -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_DEVELOPER_MODE=1 make -j$(nproc) -ctest --output-on-failure -sudo_password make -j$(nproc) install if [ "$TESTS_COVERAGE" == "1" ]; then - upload_codecov tests + exit 0 fi +ctest --output-on-failure +sudo_password make -j$(nproc) install + test_compile_all_examples_standalone # Uninstall libraries