diff --git a/.github/workflows/run_tests_cdash.yml b/.github/workflows/run_tests_cdash.yml new file mode 100644 index 0000000000..57053172cd --- /dev/null +++ b/.github/workflows/run_tests_cdash.yml @@ -0,0 +1,177 @@ +### +# Build hdf5 dependencies and cache them in a combined directory. +### + +name: Run CDash Ubuntu/Linux netCDF Tests + +on: workflow_dispatch + + + +jobs: + + build-deps-cdash: + + runs-on: ubuntu-latest + + strategy: + matrix: + hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + + steps: + - uses: actions/checkout@v3 + + - name: Install System dependencies + shell: bash -l {0} + run: sudo apt update && sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev doxygen openssl + + ### + # Installing libhdf5 + ### + - name: Cache libhdf5-${{ matrix.hdf5 }} + id: cache-hdf5 + uses: actions/cache@v3 + with: + path: ~/environments/${{ matrix.hdf5 }} + key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }} + + + - name: Build libhdf5-${{ matrix.hdf5 }} + if: steps.cache-hdf5.outputs.cache-hit != 'true' + run: | + set -x + + wget https://support.hdfgroup.org/ftp/HDF/releases/HDF4.2.15/src/hdf-4.2.15.tar.bz2 + tar -jxf hdf-4.2.15.tar.bz2 + pushd hdf-4.2.15 + ./configure --prefix=${HOME}/environments/${{ matrix.hdf5 }} --disable-static --enable-shared --disable-fortran --disable-netcdf --with-szlib --enable-hdf4-xdr + make -j + make install -j + popd + + wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$(echo ${{ matrix.hdf5 }} | cut -d. -f 1,2)/hdf5-${{ matrix.hdf5 }}/src/hdf5-${{ matrix.hdf5 }}.tar.bz2 + tar -jxf hdf5-${{ matrix.hdf5 }}.tar.bz2 + pushd hdf5-${{ matrix.hdf5 }} + ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }} --enable-hl --with-szlib + make -j + make install -j + popd + + + build-deps-parallel: + + runs-on: ubuntu-latest + + strategy: + matrix: + hdf5: [ 1.14.0 ] + + steps: + + - uses: actions/checkout@v3 + + - name: Install System dependencies + shell: bash -l {0} + run: sudo apt update && sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev mpich libmpich-dev + + ### + # Installing libhdf5 + ### + - name: Cache libhdf5-parallel-${{ matrix.hdf5 }} + id: cache-hdf5 + uses: actions/cache@v3 + with: + path: ~/environments/${{ matrix.hdf5 }} + key: hdf5-parallel-${{ runner.os }}-${{ matrix.hdf5 }} + + + - name: Build libhdf5-${{ matrix.hdf5 }}-pnetcdf-1.12.3 + if: steps.cache-hdf5.outputs.cache-hit != 'true' + run: | + set -x + + wget https://support.hdfgroup.org/ftp/HDF/releases/HDF4.2.15/src/hdf-4.2.15.tar.bz2 + tar -jxf hdf-4.2.15.tar.bz2 + pushd hdf-4.2.15 + CC=mpicc ./configure --prefix=${HOME}/environments/${{ matrix.hdf5 }} --disable-static --enable-shared --disable-fortran --disable-netcdf --with-szlib --enable-parallel --enable-hdf4-xdr + make -j + make install -j + popd + + wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$(echo ${{ matrix.hdf5 }} | cut -d. -f 1,2)/hdf5-${{ matrix.hdf5 }}/src/hdf5-${{ matrix.hdf5 }}.tar.bz2 + tar -jxf hdf5-${{ matrix.hdf5 }}.tar.bz2 + pushd hdf5-${{ matrix.hdf5 }} + CC=mpicc ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }} --enable-hl --with-szlib --enable-parallel + make -j + make install -j + popd + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.3.tar.gz + tar -zxf pnetcdf-1.12.3.tar.gz + pushd pnetcdf-1.12.3 + CC=mpicc ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }} + make -j + make install -j + popd + + + ### + # Run CTest Serial Script + ### + nc-ctest-serial: + needs: build-deps-cdash + runs-on: ubuntu-latest + environment: CDashCI + + strategy: + matrix: + hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + + steps: + - uses: actions/checkout@v3 + with: + CDASH_TOKEN: ${{ secrets.CDASH_TOKEN }} + env: + CDASH_TOKEN: ${{ secrets.CDASH_TOKEN }} + + - name: Install System dependencies + shell: bash -l {0} + run: sudo apt update && sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev + + ### + # Set Environmental Variables + ### + + - run: echo "CMAKE_PREFIX_PATH=${HOME}/environments/${{ matrix.hdf5 }}/" >> $GITHUB_ENV + - run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}/lib" >> $GITHUB_ENV + - run: echo "CTEST_OUTPUT_ON_FAILURE=1" >> $GITHUB_ENV + + ### + # Fetch Cache + ### + + - name: Fetch HDF Cache + id: cache-hdf5 + uses: actions/cache@v3 + with: + path: ~/environments/${{ matrix.hdf5 }} + key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }} + + - name: Check Cache + shell: bash -l {0} + run: ls ${HOME}/environments/${{ matrix.hdf5 }} && ls ${HOME}/environments/${{ matrix.hdf5}}/lib + + - name: Run ctest serial script + shell: bash -l {0} + env: + CDASH_TOKEN: ${{ secrets.CDASH_TOKEN }} + run: | + mkdir build + cd build + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest -j 12 -V -S ../ctest_scripts/ctest_serial.ctest + + - name: Verbose Output if CTest Failure + shell: bash -l {0} + run: | + cd build + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest -j 12 --rerun-failed --output-on-failure -VV + if: ${{ failure() }} diff --git a/.github/workflows/run_tests_win_mingw.yml b/.github/workflows/run_tests_win_mingw.yml index f48e81e7fa..7bc6cde76a 100644 --- a/.github/workflows/run_tests_win_mingw.yml +++ b/.github/workflows/run_tests_win_mingw.yml @@ -4,7 +4,7 @@ # for information related to github runners. ### -name: Run MSYS2, MinGW64-based Tests +name: Run MSYS2, MinGW64-based Tests (Not Visual Studio) env: CPPFLAGS: "-D_BSD_SOURCE" diff --git a/CMakeLists.txt b/CMakeLists.txt index 0191f1454c..29c505aadd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -267,7 +267,8 @@ IF(CMAKE_COMPILER_IS_GNUCC OR APPLE) # Coverage tests need to have optimization turned off. IF(ENABLE_COVERAGE_TESTS) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -coverage -fprofile-arcs -ftest-coverage") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -coverage -fprofile-arcs -ftest-coverage") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage") MESSAGE(STATUS "Coverage Tests: On.") ENDIF() diff --git a/ctest_scripts/ctest_mpicc.ctest b/ctest_scripts/ctest_mpicc.ctest index 9bca2038d8..617ea49a22 100644 --- a/ctest_scripts/ctest_mpicc.ctest +++ b/ctest_scripts/ctest_mpicc.ctest @@ -10,7 +10,11 @@ SET(CTEST_SOURCE_DIRECTORY "..") SET(CTEST_BINARY_DIRECTORY ".") set(CDASH_TOKEN $ENV{CDASH_TOKEN}) -MESSAGE("Using cdash token: ${CDASH_TOKEN}") +IF (CDASH_TOKEN) + MESSAGE("CDASH TOKEN FOUND") +ELSE (CDASH_TOKEN) + MESSAGE("NO CDASH TOKEN FOUND") +ENDIF (CDASH_TOKEN) SITE_NAME(local_site_name) diff --git a/ctest_scripts/ctest_serial.ctest b/ctest_scripts/ctest_serial.ctest index 522ca0b8c8..71a6eb6969 100644 --- a/ctest_scripts/ctest_serial.ctest +++ b/ctest_scripts/ctest_serial.ctest @@ -10,9 +10,13 @@ SET(CTEST_SOURCE_DIRECTORY "..") SET(CTEST_BINARY_DIRECTORY ".") set(CDASH_TOKEN $ENV{CDASH_TOKEN}) -MESSAGE("Using cdash token: ${CDASH_TOKEN}") - +IF (CDASH_TOKEN) + MESSAGE("CDASH TOKEN FOUND") +ELSE (CDASH_TOKEN) + MESSAGE("NO CDASH TOKEN FOUND") +ENDIF (CDASH_TOKEN) + SITE_NAME(local_site_name) set(CTEST_SITE ${local_site_name}) @@ -29,7 +33,7 @@ find_program(CTEST_GIT_COMMAND NAMES git) find_program(CTEST_COVERAGE_COMMAND NAMES gcov) find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) -set(CTEST_BUILD_OPTIONS "-DENABLE_COVERAGE_TESTS=TRUE -DENABLE_ERANGE_FILL=TRUE -DENABLE_LOGGING=TRUE -DENABLE_BYTERANGE=TRUE -DENABLE_LARGE_FILE_TESTS=FALSE") +set(CTEST_BUILD_OPTIONS "-DENABLE_COVERAGE_TESTS=FALSE -DENABLE_ERANGE_FILL=TRUE -DENABLE_LOGGING=TRUE -DENABLE_BYTERANGE=TRUE -DENABLE_LARGE_FILE_TESTS=FALSE") set(CTEST_DROP_METHOD https) @@ -42,7 +46,6 @@ ctest_start("Experimental") ctest_configure() ctest_build() ctest_test() -ctest_coverage() if (NOT "${CDASH_TOKEN}" STREQUAL "") ctest_submit(HTTPHEADER "Authorization: Bearer ${CDASH_TOKEN}") endif() diff --git a/ctest_scripts/ctest_serial_coverage.ctest b/ctest_scripts/ctest_serial_coverage.ctest new file mode 100644 index 0000000000..9b8f90a201 --- /dev/null +++ b/ctest_scripts/ctest_serial_coverage.ctest @@ -0,0 +1,52 @@ +### +# Standard CTest Script for testing netCDF. +# Requires a CDash Token. +# +# Set the CDASH_TOKEN environmental variable. +# +### + +SET(CTEST_SOURCE_DIRECTORY "..") +SET(CTEST_BINARY_DIRECTORY ".") + +set(CDASH_TOKEN $ENV{CDASH_TOKEN}) +IF (CDASH_TOKEN) + MESSAGE("CDASH TOKEN FOUND") +ELSE (CDASH_TOKEN) + MESSAGE("NO CDASH TOKEN FOUND") +ENDIF (CDASH_TOKEN) + + +SITE_NAME(local_site_name) +set(CTEST_SITE ${local_site_name}) + +set(CTEST_BUILD_CONFIGURATION "Profiling") +set(CTEST_CMAKE_GENERATOR "Unix Makefiles") +set(CTEST_BUILD_NAME "default") +set(CTEST_BUILD_CONFIGURATION "Profiling") +set(CTEST_DROP_METHOD "https") +set(CTEST_DROP_SITE_CDASH TRUE) +set(CTEST_PROJECT_NAME netcdf-c) + +find_program(CMAKE_COMMAND cmake) +find_program(CTEST_GIT_COMMAND NAMES git) +find_program(CTEST_COVERAGE_COMMAND NAMES gcov) +find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) + +set(CTEST_BUILD_OPTIONS "-DENABLE_COVERAGE_TESTS=TRUE -DENABLE_ERANGE_FILL=TRUE -DENABLE_LOGGING=TRUE -DENABLE_BYTERANGE=TRUE -DENABLE_LARGE_FILE_TESTS=FALSE") + + +set(CTEST_DROP_METHOD https) +set(CTEST_DROP_SITE "cdash.unidata.ucar.edu:443") +set(CTEST_DROP_LOCATION "/submit.php?project=netcdf-c") + +set(CTEST_CONFIGURE_COMMAND "${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION} ${CTEST_BUILD_OPTIONS} ${CTEST_SOURCE_DIRECTORY}") + +ctest_start("Experimental") +ctest_configure() +ctest_build() +ctest_test() +ctest_coverage() +if (NOT "${CDASH_TOKEN}" STREQUAL "") + ctest_submit(HTTPHEADER "Authorization: Bearer ${CDASH_TOKEN}") +endif() diff --git a/ctest_scripts/ctest_serial_dap.ctest b/ctest_scripts/ctest_serial_dap.ctest index 9ea3333459..80fe31264d 100644 --- a/ctest_scripts/ctest_serial_dap.ctest +++ b/ctest_scripts/ctest_serial_dap.ctest @@ -10,7 +10,11 @@ SET(CTEST_SOURCE_DIRECTORY "..") SET(CTEST_BINARY_DIRECTORY ".") set(CDASH_TOKEN $ENV{CDASH_TOKEN}) -MESSAGE("Using cdash token: ${CDASH_TOKEN}") +IF (CDASH_TOKEN) + MESSAGE("CDASH TOKEN FOUND") +ELSE (CDASH_TOKEN) + MESSAGE("NO CDASH TOKEN FOUND") +ENDIF (CDASH_TOKEN) SITE_NAME(local_site_name)