From 6b0b03f8390b60c9d1877dbc68f309be50a70587 Mon Sep 17 00:00:00 2001 From: Pierre Marchand Date: Tue, 17 Sep 2024 17:57:00 +0200 Subject: [PATCH] Update CI --- .clang-format | 4 +- .github/workflows/CI.yml | 133 ++++++++++++------ .gitignore | 8 ++ CMakeLists.txt | 14 +- tests/functional_tests/solvers/CMakeLists.txt | 5 +- 5 files changed, 112 insertions(+), 52 deletions(-) diff --git a/.clang-format b/.clang-format index d7c9968d..418997a4 100644 --- a/.clang-format +++ b/.clang-format @@ -7,5 +7,5 @@ BinPackArguments: false IndentPPDirectives: AfterHash AlwaysBreakTemplateDeclarations: true BreakBeforeBinaryOperators: NonAssignment -AlignConsecutiveAssignments: true -ColumnLimit: 0 \ No newline at end of file +AlignConsecutiveAssignments: Consecutive +ColumnLimit: 0 diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 669281f8..e1759847 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -5,10 +5,9 @@ name: CI # Controls when the action will run. on: # Triggers the workflow on push or pull request events but only for the master branch - push: - branches: [main, develop] + pull_request: - branches: [main, develop] + branches: [main] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -31,11 +30,11 @@ jobs: CXX_COMPILER: g++ container: "ubuntu_gcc_openmpi" MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe" - USE_SANITIZER: Address"" - ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi - CMAKE_BUILD_TYPE: Release - DOCKER_OPTIONS: " " + USE_SANITIZER: "" + # ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi + CMAKE_BUILD_TYPE: Debug CODE_COVERAGE: "OFF" + DOCKER_OPTIONS: "--cap-add SYS_PTRACE" - name: "Ubuntu OpenMPI clang++" CC_COMPILER: clang @@ -43,9 +42,9 @@ jobs: container: "ubuntu_clang_openmpi" MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe" USE_SANITIZER: "" - CMAKE_BUILD_TYPE: Release - DOCKER_OPTIONS: " " + CMAKE_BUILD_TYPE: Debug CODE_COVERAGE: "OFF" + DOCKER_OPTIONS: "--cap-add SYS_PTRACE" - name: "Ubuntu MPICH g++" CC_COMPILER: gcc @@ -70,27 +69,26 @@ jobs: CODE_COVERAGE: "OFF" # Hangs up on github - # - name: "Debian OpenMPI g++" - # CC_COMPILER: gcc - # CXX_COMPILER: g++ - # container: "debian_openmpi" - # MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe" - # USE_SANITIZER: "Address" - # ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi - # CMAKE_BUILD_TYPE: Debug - # DOCKER_OPTIONS: " " - # CODE_COVERAGE: "OFF" - # # DOCKER_OPTIONS: "--cap-add SYS_PTRACE" - # - name: "Debian OpenMPI clang++" - # CC_COMPILER: clang - # CXX_COMPILER: clang++ - # container: "debian_openmpi" - # MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe" - # USE_SANITIZER: "" - # CMAKE_BUILD_TYPE: Debug - # DOCKER_OPTIONS: " " - # CODE_COVERAGE: "OFF" - # DOCKER_OPTIONS: "--cap-add SYS_PTRACE" + - name: "Debian OpenMPI g++" + CC_COMPILER: gcc + CXX_COMPILER: g++ + container: "debian_gcc_openmpi" + MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe" + USE_SANITIZER: "" + # ASAN_OPTIONS: "ASAN_OPTIONS=detect_leaks=0" # issue probably with openmpi + CMAKE_BUILD_TYPE: Debug + CODE_COVERAGE: "OFF" + DOCKER_OPTIONS: "--cap-add SYS_PTRACE" + + - name: "Debian OpenMPI clang++" + CC_COMPILER: clang + CXX_COMPILER: clang++ + container: "debian_clang_openmpi" + MPIEXEC_PREFLAGS: "--allow-run-as-root --oversubscribe" + USE_SANITIZER: "" + CMAKE_BUILD_TYPE: Debug + CODE_COVERAGE: "OFF" + DOCKER_OPTIONS: "--cap-add SYS_PTRACE" - name: "Debian MPICH g++" CC_COMPILER: gcc @@ -126,46 +124,63 @@ jobs: name: CI (${{ matrix.name }}) # Steps represent a sequence of tasks that will be executed as part of the job - if: "!contains(github.event.head_commit.message, '[ci skip]')" steps: - name: Checkout htool uses: actions/checkout@v3 with: path: "htool" + # ref: 14d013835eceb940b9b51dd90462fe67834db777 fetch-depth: 0 # to get tags - name: Checkout hpddm - uses: actions/checkout@v3 - with: - repository: hpddm/hpddm - ref: d19056d0e3010b905fca5b73f5c48a766b8a042d - path: "hpddm" + run: | + git clone https://github.com/hpddm/hpddm.git hpddm + cd hpddm && git checkout 5890d5addf3962d539dc25c441ec3ff4af93b3ab + # uses: actions/checkout@v3 + # with: + # path: "hpddm" + # repository: hpddm/hpddm + # ref: afb9562c9c6673d9ff760985b104ef8d4caa3621 + + - name: Activate virtualenv + run: | + . /usr/local/share/venv/bin/activate + echo PATH=$PATH >> $GITHUB_ENV - name: Build tests run: | cd htool && mkdir build && cd build - cmake -DHTOOL_WITH_EXAMPLES=1 -DMPIEXEC_PREFLAGS="${{ matrix.MPIEXEC_PREFLAGS }}" -DUSE_SANITIZER=${{ matrix.USE_SANITIZER }} -DCMAKE_BUILD_TYPE=${{ matrix.CMAKE_BUILD_TYPE }} -DCODE_COVERAGE=${{ matrix.CODE_COVERAGE }} ../ - make -j2 build-tests + cmake -DHTOOL_WITH_EXAMPLES=ON -DHTOOL_WITH_DOC=ON -DHTOOL_WITH_STRICT_TESTS=ON -DMPIEXEC_PREFLAGS="${{ matrix.MPIEXEC_PREFLAGS }}" -DUSE_SANITIZER=${{ matrix.USE_SANITIZER }} -DCMAKE_BUILD_TYPE=${{ matrix.CMAKE_BUILD_TYPE }} -DCODE_COVERAGE=${{ matrix.CODE_COVERAGE }} ../ + make -j 4 build-tests - name: Run tests run: | cd htool/build export OMP_NUM_THREADS=2 - ${{ matrix.ASAN_OPTIONS }} ctest --output-on-failure + ${{ matrix.ASAN_OPTIONS }} ctest -j 4 --output-on-failure - name: Build examples run: | cd htool/build - make -j2 build-examples + make -j 4 build-examples - name: Build documentation run: | cd htool/build make doc - - name: Check format + - name: Check c++ format + uses: DoozyX/clang-format-lint-action@v0.16.2 + with: + source: 'htool/include htool/tests' + # exclude: './third_party ./external' + extensions: 'hpp,cpp' + clangFormatVersion: 16 + style: file + + - name: Check cmake format run: | + . /usr/local/share/venv/bin/activate cd htool/build - make format make cmake-format git diff --exit-code @@ -174,10 +189,36 @@ jobs: run: | cd htool/ lcov --capture --base-directory ./ --directory build/ --output-file coverage.info - lcov --remove coverage.info '/usr/*' '*/hpddm/*' --output-file coverage.info + lcov --remove coverage.info '/usr/*' '*/hpddm/*' --output-file ../coverage.info - - name: Upload coverage to Codecov + - uses: actions/upload-artifact@v4 + with: + path: coverage.info + if-no-files-found: error if: matrix.CODE_COVERAGE == 'ON' - uses: codecov/codecov-action@v2 + + # - name: Upload coverage to Codecov + # if: matrix.CODE_COVERAGE == 'ON' + # uses: codecov/codecov-action@v4.5.0 + # with: + # fail_ci_if_error: true + # files: htool/coverage.info + # token: ${{ secrets.CODECOV_TOKEN }} + # verbose: true + + coverage: + runs-on: ubuntu-latest + if: ${{ success() }} + needs: [ linux ] + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/download-artifact@v4 + - name: Upload coverage report + uses: codecov/codecov-action@v4 with: - file: htool/coverage.info + fail_ci_if_error: true + file: ./coverage.info + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/.gitignore b/.gitignore index 77a1ba6f..ff0da5a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,11 @@ +# Dotfiles +.* +!.gitignore +!.clang-format +!.clang-tidy +!.devcontainer +!.github + # Compiled Object files *.slo *.lo diff --git a/CMakeLists.txt b/CMakeLists.txt index 69144b59..2fc67e7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,6 +87,7 @@ endif() # Options option(HTOOL_WITH_EXAMPLES "Build htool examples ?" ON) option(HTOOL_WITH_DOC "Build documentation" ON) +option(HTOOL_WITH_STRICT_TESTS "Add -Werror to the tests" OFF) #=============================================================================# #========================== External Libraries ===============================# @@ -126,7 +127,12 @@ if(OpenMP_CXX_FOUND) endif() target_compile_features(htool INTERFACE cxx_std_11) -if("${BLA_VENDOR}" STREQUAL "Intel10_64lp_seq" OR "${BLA_VENDOR}" STREQUAL "Intel10_64lp") +if("${BLA_VENDOR}" STREQUAL "Intel10_32" + OR "${BLA_VENDOR}" STREQUAL "Intel10_64lp" + OR "${BLA_VENDOR}" STREQUAL "Intel10_64lp_seq" + OR "${BLA_VENDOR}" STREQUAL "Intel10_64ilp" + OR "${BLA_VENDOR}" STREQUAL "Intel10_64ilp_seq" + OR "${BLA_VENDOR}" STREQUAL "Intel10_64_dyn") target_compile_definitions(htool INTERFACE "-DHPDDM_MKL -DHTOOL_MKL") endif() @@ -182,11 +188,13 @@ if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) AND BUILD_TESTING) target_compile_options(htool INTERFACE -fprofile-arcs -ftest-coverage) target_link_libraries(htool INTERFACE gcov) endif() + if(HTOOL_WITH_STRICT_TESTS) + target_compile_options(htool INTERFACE -Werror) + endif() target_compile_options( htool INTERFACE -Wall -Wextra - -Werror -Wshadow -Wnon-virtual-dtor -pedantic @@ -199,7 +207,7 @@ if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) AND BUILD_TESTING) -Wdouble-promotion -Wno-sign-compare -Wextra-semi - # -Wzero-as-null-pointer-constant + -Wzero-as-null-pointer-constant -Wundef) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(htool INTERFACE -Wimplicit-fallthrough -Wextra-semi-stmt -ferror-limit=200) diff --git a/tests/functional_tests/solvers/CMakeLists.txt b/tests/functional_tests/solvers/CMakeLists.txt index 27b84b8a..ac17472d 100644 --- a/tests/functional_tests/solvers/CMakeLists.txt +++ b/tests/functional_tests/solvers/CMakeLists.txt @@ -11,7 +11,10 @@ FetchContent_Declare( GIT_SUBMODULES_RECURSE FALSE GIT_SUBMODULES "") -FetchContent_MakeAvailable(data_test_repository) +FetchContent_GetProperties(data_test_repository) +if(NOT data_test_repository_POPULATED) + FetchContent_Populate(data_test_repository) +endif() set(Test_solver_ARGS ${data_test_repository_SOURCE_DIR}/data/)