From b687356b74c0c71eb4b4f68dbc5431c887cb9732 Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Wed, 21 Jul 2021 05:30:24 -0700 Subject: [PATCH] Weekly Coverage Runs to coveralls.io (#3055) * Workflow Cleanup Weekly Coverage Runs Script Cleanup * surface any test series failure * cleanup for newer cmake and actions long hashes * host cmake is new like osx --- .github/workflows/beta_artifacts.yml | 2 +- .github/workflows/coverage.yml | 56 +++++++++++++ .github/workflows/develop.yml | 4 +- .github/workflows/live_artifacts.yml | 2 +- .github/workflows/release_tests.yml | 62 -------------- .github/workflows/rocksdb_release_tests.yml | 48 ----------- .github/workflows/rocksdb_tests.yml | 68 ---------------- .github/workflows/test_network_artifacts.yml | 2 +- .github/workflows/tests.yml | 86 ++++++++++++++------ CMakeLists.txt | 25 ++++++ README.md | 3 + ci/actions/deploy.sh | 4 +- ci/actions/linux/install_deps.sh | 8 +- ci/actions/windows/build.ps1 | 2 +- ci/build-centos.sh | 4 +- ci/build-travis.sh | 34 ++++---- ci/check-cmake-format.sh | 2 +- ci/cmake-format-all.sh | 2 +- ci/test.sh | 12 ++- cmake/Modules/CoverageTest.cmake | 23 ++++++ coverage/CMakeLists.txt | 52 ++++++++++++ docker/ci/Dockerfile-gcc | 2 +- 22 files changed, 266 insertions(+), 237 deletions(-) create mode 100644 .github/workflows/coverage.yml delete mode 100644 .github/workflows/release_tests.yml delete mode 100644 .github/workflows/rocksdb_release_tests.yml delete mode 100644 .github/workflows/rocksdb_tests.yml mode change 100644 => 100755 ci/check-cmake-format.sh create mode 100644 cmake/Modules/CoverageTest.cmake create mode 100644 coverage/CMakeLists.txt diff --git a/.github/workflows/beta_artifacts.yml b/.github/workflows/beta_artifacts.yml index c930326176..4f88d957ac 100644 --- a/.github/workflows/beta_artifacts.yml +++ b/.github/workflows/beta_artifacts.yml @@ -118,4 +118,4 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file + AWS_DEFAULT_REGION: us-east-2 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 0000000000..18d2d3aeca --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,56 @@ +name: Coverage Reports + +on: + workflow_dispatch: + inputs: + label: + description: "label to append to run" + default: "Scheduled" + required: true + schedule: + - cron: "0 1 * * 0" +jobs: + coverage_test: + name: Coverage Test [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }}] + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + env: + LCOV: 1 + COMPILER: gcc + BOOST_ROOT: /tmp/boost + runs-on: ubuntu-18.04 + strategy: + matrix: + TEST_USE_ROCKSDB: [0, 1] + fail-fast: false + continue-on-error: true + timeout-minutes: 60 + steps: + - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f + with: + submodules: "recursive" + - name: Fetch Deps + run: | + sudo apt-get update -qq && sudo apt-get install -yqq build-essential g++ wget python zlib1g-dev qt5-default \ + valgrind xorg xvfb xauth xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic ocl-icd-opencl-dev \ + git lcov python3-pip + util/build_prep/fetch_boost.sh + wget -O cmake_install.sh https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.sh + chmod +x cmake_install.sh + sudo ./cmake_install.sh --prefix=/usr --exclude-subdir --skip-license + - name: Build and Test + env: + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + run: ./ci/build-travis.sh /usr/lib/x86_64-linux=gnu/cmake/Qt5 + - uses: coverallsapp/github-action@8cbef1dea373ebce56de0a14c68d6267baa10b44 + with: + github-token: ${{ secrets.github_token }} + flag-name: rocksdb-${{ matrix.TEST_USE_ROCKSDB }},${{ github.event.inputs.label }} + parallel: true + finish: + needs: coverage_test + runs-on: ubuntu-18.04 + steps: + - uses: coverallsapp/github-action@8cbef1dea373ebce56de0a14c68d6267baa10b44 + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true \ No newline at end of file diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 4a42219576..0350abf8fa 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -3,7 +3,7 @@ name: Develop on: push: branches: - - develop + - develop jobs: linux_job: runs-on: ubuntu-18.04 @@ -24,4 +24,4 @@ jobs: - name: Deploy Docker (nanocurrency/nano-env) run: ci/actions/linux/deploy-docker.sh env: - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/live_artifacts.yml b/.github/workflows/live_artifacts.yml index 3cca372e8e..3fd7b24106 100644 --- a/.github/workflows/live_artifacts.yml +++ b/.github/workflows/live_artifacts.yml @@ -117,4 +117,4 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file + AWS_DEFAULT_REGION: us-east-2 diff --git a/.github/workflows/release_tests.yml b/.github/workflows/release_tests.yml deleted file mode 100644 index e6cb9d3270..0000000000 --- a/.github/workflows/release_tests.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Release Tests - -on: - push: - tags: '*' - -env: - RELEASE: 1 - artifact: 0 - -jobs: - osx_test: - runs-on: macos-latest - env: - BOOST_ROOT: /tmp/boost - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - - name: Fetch Deps - run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests - run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; - - gcc_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - windows_test: - runs-on: windows-latest - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/windows/install_deps.ps1 - - name: Run Tests - run: ci/actions/windows/build.ps1 diff --git a/.github/workflows/rocksdb_release_tests.yml b/.github/workflows/rocksdb_release_tests.yml deleted file mode 100644 index de2fbe34e7..0000000000 --- a/.github/workflows/rocksdb_release_tests.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: RocksDB Release Tests - -on: - push: - tags: '*' - -env: - RELEASE: 1 - artifact: 0 - TEST_USE_ROCKSDB: 1 - -jobs: - osx_test: - runs-on: macos-latest - env: - BOOST_ROOT: /tmp/boost - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests - run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; - - gcc_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" diff --git a/.github/workflows/rocksdb_tests.yml b/.github/workflows/rocksdb_tests.yml deleted file mode 100644 index 94b52d0425..0000000000 --- a/.github/workflows/rocksdb_tests.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: RocksDB Tests - -on: [push, pull_request] - -env: - RELEASE: 0 - artifact: 0 - TEST_USE_ROCKSDB: 1 - -jobs: - osx_test: - runs-on: macos-latest - env: - BOOST_ROOT: /tmp/boost - DEADLINE_SCALE_FACTOR: 2 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests - run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; - - gcc_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - windows_test: - runs-on: windows-latest - timeout-minutes: 60 - env: - RELEASE: 1 - DEADLINE_SCALE_FACTOR: 2 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Windows Defender - run: ci/actions/windows/disable_windows_defender.ps1 - - name: Fetch Deps - run: ci/actions/windows/install_deps.ps1 - - name: Run Tests - run: ci/actions/windows/build.ps1 diff --git a/.github/workflows/test_network_artifacts.yml b/.github/workflows/test_network_artifacts.yml index 479b8efba0..ce473cb96b 100644 --- a/.github/workflows/test_network_artifacts.yml +++ b/.github/workflows/test_network_artifacts.yml @@ -118,4 +118,4 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file + AWS_DEFAULT_REGION: us-east-2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c429d6779a..15d0702938 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,12 +5,21 @@ on: [push, pull_request] env: RELEASE: 0 artifact: 0 - + jobs: osx_test: - runs-on: macos-latest + name: OSX unit tests [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }}] + strategy: + fail-fast: false + matrix: + TEST_USE_ROCKSDB: [0, 1] + RELEASE: + - ${{ startsWith(github.ref, 'refs/tags/') }} env: BOOST_ROOT: /tmp/boost + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + RELEASE: ${{ matrix.RELEASE }} + runs-on: macos-latest if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -18,25 +27,32 @@ jobs: submodules: "recursive" - name: Fetch Deps run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests + - name: Build Tests run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; + - name: Run Tests lmdb + if: ${{ matrix.TEST_USE_ROCKSDB == 0 }} + run: cd build && sudo TEST_USE_ROCKSDB=$TEST_USE_ROCKSDB ../ci/test.sh . + - name: Run Tests rocksdb + env: + DEADLINE_SCALE_FACTOR: 2 + if: ${{ matrix.TEST_USE_ROCKSDB == 1 }} + run: cd build && sudo TEST_USE_ROCKSDB=$TEST_USE_ROCKSDB ../ci/test.sh . - gcc_test: + linux_test: + name: Linux Unit Tests [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }} - COMPILER=${{ matrix.COMPILER }}] + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + TEST_USE_ROCKSDB: [0, 1] + COMPILER: [gcc, clang-6] + RELEASE: + - ${{ startsWith(github.ref, 'refs/tags/') }} runs-on: ubuntu-18.04 - timeout-minutes: 60 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 + env: + COMPILER: ${{ matrix.COMPILER }} + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + RELEASE: ${{ matrix.RELEASE }} if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -44,12 +60,31 @@ jobs: submodules: "recursive" - name: Fetch Deps run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + - name: Build Tests + run: docker run -e TEST_USE_ROCKSDB -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5" + - name: Run Tests lmdb + if: ${{ matrix.TEST_USE_ROCKSDB == 0 }} + run: docker run -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace/build && ../ci/test.sh ." + - name: Run Tests rocksdb + if: ${{ matrix.TEST_USE_ROCKSDB == 1 }} + run: docker run -e TEST_USE_ROCKSDB -e DEADLINE_SCALE_FACTOR=2 -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace/build && ../ci/test.sh ." windows_test: + name: Windows Unit Tests [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }}] + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + TEST_USE_ROCKSDB: [0, 1] + RELEASE: + - ${{ startsWith(github.ref, 'refs/tags/') }} + exclude: + - RELEASE: true + TEST_USE_ROCKSDB: 1 runs-on: windows-latest - timeout-minutes: 60 + env: + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + RELEASE: ${{ matrix.RELEASE }} if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -57,8 +92,13 @@ jobs: submodules: "recursive" - name: Windows Defender run: ci/actions/windows/disable_windows_defender.ps1 - - name: Fetch Deps run: ci/actions/windows/install_deps.ps1 - - name: Run Tests + - name: Run Tests lmdb + if: ${{ matrix.TEST_USE_ROCKSDB == 0 }} + run: ci/actions/windows/build.ps1 + - name: Run Tests rocksdb + if: ${{ matrix.TEST_USE_ROCKSDB == 1 }} + env: + DEADLINE_SCALE_FACTOR: 2 run: ci/actions/windows/build.ps1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3683c55158..7db5c61ad6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,15 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE) option(CI_BUILD false) + +set(COVERAGE + OFF + CACHE BOOL "Code Coverage Targets") +if(COVERAGE) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules") + include(CoverageTest) +endif() + set(CI_TEST 0 CACHE STRING "") @@ -600,6 +609,17 @@ if(NANO_TEST OR RAIBLOCKS_TEST) add_subdirectory(nano/core_test) add_subdirectory(nano/rpc_test) add_subdirectory(nano/slow_test) + add_custom_target( + build_tests + COMMAND echo "BATCH BUILDING TESTS" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS core_test load_test rpc_test nano_node nano_rpc) + + add_custom_target( + run_tests + COMMAND ${PROJECT_SOURCE_DIR}/ci/test.sh ${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + DEPENDS build_tests) endif() if(NANO_GUI OR RAIBLOCKS_GUI) install(FILES ${PROJECT_BINARY_DIR}/config-node.toml.sample DESTINATION .) @@ -690,6 +710,7 @@ if(NANO_GUI OR RAIBLOCKS_GUI) set_target_properties( qt_test PROPERTIES COMPILE_FLAGS "-DQT_NO_KEYWORDS -DBOOST_ASIO_HAS_STD_ARRAY=1") + add_dependencies(build_tests qt_test) endif() if(APPLE) @@ -839,5 +860,9 @@ if(NANO_GUI OR RAIBLOCKS_GUI) endif() endif() +if(COVERAGE) + add_subdirectory(coverage) +endif() + set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE) include(CPack) diff --git a/README.md b/README.md index e2bea00584..ae0f4f13d8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@