diff options
Diffstat (limited to '.github')
23 files changed, 1609 insertions, 628 deletions
diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml new file mode 100644 index 0000000..ddc1a39 --- /dev/null +++ b/.github/workflows/autotools.yml @@ -0,0 +1,54 @@ +name: hdf5 1.14 autools CI + +# Controls when the action will run. Triggers the workflow on push or pull request +on: + workflow_call: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + call-workflow-special-autotools: + name: "Autotools Special Workflows" + uses: ./.github/workflows/main-auto-spc.yml + + call-parallel-special-autotools: + name: "Autotools Parallel Special Workflows" + uses: ./.github/workflows/main-auto-par.yml + + call-debug-thread-autotools: + name: "Autotools Debug Thread-Safety Workflows" + uses: ./.github/workflows/main-auto.yml + with: + thread_safety: enable + build_mode: "debug" + + call-release-thread-autotools: + name: "Autotools Release Thread-Safety Workflows" + uses: ./.github/workflows/main-auto.yml + with: + thread_safety: enable + build_mode: "production" + + call-debug-autotools: + name: "Autotools Debug Workflows" + uses: ./.github/workflows/main-auto.yml + with: + thread_safety: disable + build_mode: "debug" + + call-release-autotools: + name: "Autotools Release Workflows" + uses: ./.github/workflows/main-auto.yml + with: + thread_safety: disable + build_mode: "production" + + call-release-auto-intel: + name: "Autotools Intel Workflows" + uses: ./.github/workflows/intel-auto.yml + with: + build_mode: "production" diff --git a/.github/workflows/clang-format-check.yml b/.github/workflows/clang-format-check.yml index 56d2b48..cde27c1 100644 --- a/.github/workflows/clang-format-check.yml +++ b/.github/workflows/clang-format-check.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'skip-ci')" steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Run clang-format style check for C and Java code uses: DoozyX/clang-format-lint-action@v0.13 with: diff --git a/.github/workflows/clang-format-fix.yml b/.github/workflows/clang-format-fix.yml index 5981118..d701d23 100644 --- a/.github/workflows/clang-format-fix.yml +++ b/.github/workflows/clang-format-fix.yml @@ -21,7 +21,7 @@ jobs: permissions: contents: write # In order to allow EndBug/add-and-commit to commit changes steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Fix C and Java formatting issues detected by clang-format uses: DoozyX/clang-format-lint-action@v0.13 with: diff --git a/.github/workflows/cmake-ctest.yml b/.github/workflows/cmake-ctest.yml index 3c70954..c647cca 100644 --- a/.github/workflows/cmake-ctest.yml +++ b/.github/workflows/cmake-ctest.yml @@ -1,6 +1,6 @@ name: hdf5 1.14 ctest runs -# Controls when the action will run. Triggers the workflow on a schedule +# Controls when the action will run. Triggers the workflow on a call on: workflow_call: inputs: diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 0000000..4ca4f68 --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,46 @@ +name: hdf5 1.14 cmake CI + +# Controls when the action will run. Triggers the workflow on push or pull request +on: + workflow_call: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + call-debug-thread-cmake: + name: "CMake Debug Thread-Safety Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + thread_safety: true + build_mode: "Debug" + + call-release-thread-cmake: + name: "CMake Release Thread-Safety Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + thread_safety: true + build_mode: "Release" + + call-debug-cmake: + name: "CMake Debug Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + thread_safety: false + build_mode: "Debug" + + call-release-cmake: + name: "CMake Release Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + thread_safety: false + build_mode: "Release" + + call-release-cmake-intel: + name: "CMake Intel Workflows" + uses: ./.github/workflows/intel-cmake.yml + with: + build_mode: "Release" diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 5640224..e39af68 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -10,7 +10,7 @@ jobs: name: Check for spelling errors runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: codespell-project/actions-codespell@master with: skip: ./.github/workflows/codespell.yml,./bin/trace,./hl/tools/h5watch/h5watch.c,./tools/test/h5jam/tellub.c,./config/sanitizer/LICENSE,./config/sanitizer/sanitizers.cmake,./tools/test/h5repack/testfiles/*.dat,./test/API/driver,./configure,./bin/ltmain.sh,./bin/depcomp,./bin/config.guess,./bin/config.sub,./autom4te.cache,./m4/libtool.m4,./c++/src/*.html diff --git a/.github/workflows/cve.yml b/.github/workflows/cve.yml new file mode 100644 index 0000000..54dc299 --- /dev/null +++ b/.github/workflows/cve.yml @@ -0,0 +1,51 @@ +name: cve 1.14 + +on: + workflow_dispatch: + push: + pull_request: + branches: [ hdf5_1_14 ] + paths-ignore: + - '.github/CODEOWNERS' + - '.github/FUNDING.yml' + - 'doc/**' + - 'release_docs/**' + - 'ACKNOWLEDGEMENTS' + - 'COPYING**' + - '**.md' + +# Using concurrency to cancel any in-progress job or run +concurrency: + group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + name: CVE regression + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt update + sudo apt install automake autoconf libtool libtool-bin + - name: Install HDF5 + run: | + ./autogen.sh + ./configure --prefix=/usr/local --disable-tests + make + sudo make install + - name: Checkout CVE test repository + uses: actions/checkout@v4 + with: + repository: HDFGroup/cve_hdf5 + path: cve_hdf5 + - name: Run regression tests + run: | + cd cve_hdf5 + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" + ./test_hdf5_cve.sh /usr/local/bin ./cve_out diff --git a/.github/workflows/daily-build.yml b/.github/workflows/daily-build.yml index 6f7655b..fadf6ff 100644 --- a/.github/workflows/daily-build.yml +++ b/.github/workflows/daily-build.yml @@ -3,6 +3,8 @@ name: hdf5 1.14 daily build # Controls when the action will run. Triggers the workflow on a schedule on: workflow_dispatch: + schedule: + - cron: "6 0 * * *" permissions: contents: read diff --git a/.github/workflows/hdfeos5.yml b/.github/workflows/hdfeos5.yml index 5b071b1..0332c9d 100644 --- a/.github/workflows/hdfeos5.yml +++ b/.github/workflows/hdfeos5.yml @@ -27,7 +27,7 @@ jobs: name: Build hdfeos5 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Autotools Dependencies (Linux) run: | diff --git a/.github/workflows/intel-auto.yml b/.github/workflows/intel-auto.yml new file mode 100644 index 0000000..ca6b047 --- /dev/null +++ b/.github/workflows/intel-auto.yml @@ -0,0 +1,97 @@ +name: hdf5 1.14 autotools icx CI + +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + Intel_build_and_test: + name: "Intel ${{ inputs.build_mode }} -Werror (build only)" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install autoconf automake libtool libtool-bin libaec-dev + - name: Add oneAPI to apt + shell: bash + run: | + cd /tmp + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo add-apt-repository -y "deb https://apt.repos.intel.com/oneapi all main" + + - name: Install oneAPI dpcpp and fortran compiler + shell: bash + run: | + sudo apt update + sudo apt install -y intel-oneapi-compiler-dpcpp-cpp + sudo apt install -y intel-oneapi-compiler-fortran + sudo apt install -y intel-oneapi-mpi-devel + sudo apt-get install doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + echo "CC=icx" >> $GITHUB_ENV + echo "CXX=icpx" >> $GITHUB_ENV + echo "FC=ifx" >> $GITHUB_ENV + + - name: Install oneAPI MKL library + shell: bash + run: | + sudo apt install -y intel-oneapi-mkl-devel + + - name: Autotools Configure + shell: bash + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --enable-shared \ + --disable-fortran + + # BUILD + - name: Autotools Build + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + make -j3 + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + # NORMAL + - name: Autotools Run Tests + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + export SYCL_DEVICE_FILTER=opencl.cpu + make check -j2 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + export SYCL_DEVICE_FILTER=opencl.cpu + make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + export SYCL_DEVICE_FILTER=opencl.cpu + make check-install + working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/intel-cmake.yml b/.github/workflows/intel-cmake.yml new file mode 100644 index 0000000..22db843 --- /dev/null +++ b/.github/workflows/intel-cmake.yml @@ -0,0 +1,81 @@ +name: hdf5 1.14 CMake icx CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + Intel_build_and_test: + name: "Intel ${{ inputs.build_mode }} -Werror (build only)" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: add oneAPI to apt + shell: bash + run: | + cd /tmp + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo add-apt-repository -y "deb https://apt.repos.intel.com/oneapi all main" + + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + + - name: install oneAPI dpcpp and fortran compiler + shell: bash + run: | + sudo apt update + sudo apt install -y intel-oneapi-compiler-dpcpp-cpp + sudo apt install -y intel-oneapi-compiler-fortran + + - name: install oneAPI MKL library + shell: bash + run: | + sudo apt install -y intel-oneapi-mkl-devel + + - name: CMake Configure with icx + shell: bash + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DCMAKE_TOOLCHAIN_FILE=config/toolchain/intel.cmake \ + -DMKL_ROOT="/opt/intel/oneapi/mkl/latest" \ + -DTBB_ROOT="/opt/intel/oneapi/tbb/latest" \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DHDF5_BUILD_FORTRAN=OFF \ + $GITHUB_WORKSPACE + + # BUILD + - name: CMake Build + shell: bash + run: | + source /opt/intel/oneapi/setvars.sh + cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + - name: CMake Run Tests + shell: bash + run: | + source /opt/intel/oneapi/setvars.sh + export SYCL_DEVICE_FILTER=opencl.cpu + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/linux-nvhpc-auto.yml b/.github/workflows/linux-nvhpc-auto.yml new file mode 100644 index 0000000..fe6653e --- /dev/null +++ b/.github/workflows/linux-nvhpc-auto.yml @@ -0,0 +1,58 @@ +name: linux autotools nvhpc + +on: + workflow_dispatch: + push: + pull_request: + branches: [ hdf5_1_14 ] + paths-ignore: + - '.github/CODEOWNERS' + - '.github/FUNDING.yml' + - 'doc/**' + - 'release_docs/**' + - 'ACKNOWLEDGEMENTS' + - 'COPYING**' + - '**.md' + +# Using concurrency to cancel any in-progress job or run +concurrency: + group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Install System dependencies + 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 libtool libtool-bin build-essential + - name: Install NVHPC + run: | + curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg + echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list + sudo apt-get update -y + sudo apt-get install -y nvhpc-23-7 + - name: Get Sources + uses: actions/checkout@v4 + - name: Test HDF5 + env: + NPROCS: 2 + run: | + export NVHPCSDK=/opt/nvidia/hpc_sdk + export OMPI_CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc++ + export OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc + export OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvfortran + export LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/lib + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + export DESTDIR=/tmp + ./autogen.sh + ./configure CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin/mpicc FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin/mpifort FCFLAGS="-fPIC -fortranlibs" --enable-fortran --enable-shared --enable-parallel + cat config.log + make -j + make check -j + make install + make uninstall diff --git a/.github/workflows/linux-nvhpc.yml b/.github/workflows/linux-nvhpc.yml new file mode 100644 index 0000000..17fa93c --- /dev/null +++ b/.github/workflows/linux-nvhpc.yml @@ -0,0 +1,56 @@ +name: linux CMake nvhpc + +on: + workflow_dispatch: + push: + pull_request: + branches: [ hdf5_1_14 ] + paths-ignore: + - '.github/CODEOWNERS' + - '.github/FUNDING.yml' + - 'doc/**' + - 'release_docs/**' + - 'ACKNOWLEDGEMENTS' + - 'COPYING**' + - '**.md' + +# Using concurrency to cancel any in-progress job or run +concurrency: + group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Install System dependencies + 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 libtool libtool-bin build-essential + - name: Install NVHPC + run: | + curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg + echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list + sudo apt-get update -y + sudo apt-get install -y nvhpc-23-7 + - name: Get Sources + uses: actions/checkout@v4 + - name: Test HDF5 + env: + FC: nvfortran + CC: nvc + FCFLAGS: -fPIC + run: | + export NVHPCSDK=/opt/nvidia/hpc_sdk + export OMPI_CXX=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc++ + export OMPI_CC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvc + export OMPI_FC=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin/nvfortran + export LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/cuda/12.2/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/lib + export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/comm_libs/openmpi4/bin:/opt/nvidia/hpc_sdk/Linux_x86_64/23.7/compilers/bin:$PATH + cmake -B build -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF -DHDF5_ENABLE_PARALLEL:BOOL=ON -DHDF5_BUILD_FORTRAN:BOOL=ON + cat build/CMakeCache.txt + cmake --build build + ctest --test-dir build --output-on-failure diff --git a/.github/workflows/main-auto-par.yml b/.github/workflows/main-auto-par.yml new file mode 100644 index 0000000..5c54f02 --- /dev/null +++ b/.github/workflows/main-auto-par.yml @@ -0,0 +1,137 @@ +name: hdf5 1.14 autotools CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + # + # SPECIAL AUTOTOOLS BUILDS + # + # These do not run tests and are not built into the matrix and instead + # become NEW configs as their name would clobber one of the matrix + # names (so make sure the names are UNIQUE). + # + + build_parallel_debug_werror: + name: "gcc DBG parallel -Werror (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + sudo apt install openmpi-bin openmpi-common mpi-default-dev + echo "CC=mpicc" >> $GITHUB_ENV + echo "FC=mpif90" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + CFLAGS=-Werror $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --enable-parallel \ + --enable-subfiling-vfd \ + --disable-cxx \ + --disable-fortran \ + --disable-java \ + --disable-mirror-vfd \ + --enable-direct-vfd \ + --disable-ros3-vfd \ + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_parallel_release_werror: + name: "gcc REL parallel -Werror (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + sudo apt install openmpi-bin openmpi-common mpi-default-dev + echo "CC=mpicc" >> $GITHUB_ENV + echo "FC=mpif90" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + CFLAGS=-Werror $GITHUB_WORKSPACE/configure \ + --enable-build-mode=production \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --enable-parallel \ + --enable-subfiling-vfd \ + --disable-cxx \ + --disable-fortran \ + --disable-java \ + --disable-mirror-vfd \ + --enable-direct-vfd \ + --disable-ros3-vfd \ + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + diff --git a/.github/workflows/main-auto-spc.yml b/.github/workflows/main-auto-spc.yml new file mode 100644 index 0000000..4925a18 --- /dev/null +++ b/.github/workflows/main-auto-spc.yml @@ -0,0 +1,509 @@ +name: hdf5 1.14 autotools special CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + # + # SPECIAL AUTOTOOLS BUILDS + # + # These do not run tests and are not built into the matrix and instead + # become NEW configs as their name would clobber one of the matrix + # names (so make sure the names are UNIQUE). + # + + build_v1_6: + name: "gcc DBG v1.6 default API (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v16 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_v1_8: + name: "gcc DBG v1.8 default API (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v18 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_v1_10: + name: "gcc DBG v1.10 default API (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v110 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_v1_12: + name: "gcc DBG v1.12 default API (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v112 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_v1_14: + name: "gcc DBG v1.14 default API (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_no_deprecated: + name: "gcc no deprecated symbols (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --disable-deprecated-symbols \ + --with-default-api-version=default \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_debug_werror: + name: "gcc DBG -Werror (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + CFLAGS=-Werror $GITHUB_WORKSPACE/configure \ + --enable-build-mode=debug \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --disable-fortran \ + --enable-java \ + --disable-mirror-vfd \ + --enable-direct-vfd \ + --disable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + build_release_werror: + name: "gcc REL -Werror (build only)" + runs-on: ubuntu-latest + steps: + # SETUP + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + - name: Install Autotools Dependencies (Linux) + run: | + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + CFLAGS=-Werror $GITHUB_WORKSPACE/configure \ + --enable-build-mode=production \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --disable-parallel \ + --enable-cxx \ + --disable-fortran \ + --enable-java \ + --disable-mirror-vfd \ + --enable-direct-vfd \ + --disable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + diff --git a/.github/workflows/main-auto.yml b/.github/workflows/main-auto.yml new file mode 100644 index 0000000..c4f4252 --- /dev/null +++ b/.github/workflows/main-auto.yml @@ -0,0 +1,182 @@ +name: hdf5 1.14 autotools CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + inputs: + thread_safety: + description: "thread-safety enable/disable" + required: true + type: string + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + + # A workflow that builds the library and runs all the tests + # Linux (Ubuntu) w/ gcc + Autotools + # + Autotools_build_and_test: + name: "GCC-${{ inputs.build_mode }}-TS=${{ inputs.thread_safety }}d" + # Don't run the action if the commit message says to skip CI + if: "!contains(github.event.head_commit.message, 'skip-ci')" + + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # SETUP + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --disable-parallel \ + --${{ inputs.thread_safety }}-threadsafe \ + --enable-cxx \ + --enable-fortran \ + --enable-java \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + if: ${{ inputs.thread_safety == 'disable' }} + + - name: Autotools Configure (Thread-Safe) + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --enable-shared \ + --${{ inputs.thread_safety }}-threadsafe \ + --disable-hl \ + --disable-parallel \ + --enable-mirror-vfd \ + --enable-direct-vfd \ + --enable-ros3-vfd \ + --with-szlib=yes + shell: bash + if: ${{ inputs.thread_safety == 'enable' }} + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + # NORMAL + - name: Autotools Run Tests + run: make check -j2 + working-directory: ${{ runner.workspace }}/build + if: ${{ inputs.thread_safety == 'disable' }} + + # THREAD-SAFE + - name: Autotools Run Thread-Safe Tests + run: | + cd test + ./ttsafe + working-directory: ${{ runner.workspace }}/build + if: ${{ inputs.thread_safety == 'enable' }} + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + - name: Autotools Verify Install + run: make check-install + working-directory: ${{ runner.workspace }}/build + + # + # The GitHub runners are inadequate for running parallel HDF5 tests, + # so we catch most issues in daily testing. What we have here is just + # a compile check to make sure nothing obvious is broken. + # A workflow that builds the library + # Parallel Linux (Ubuntu) w/ gcc + Autotools + # + Autotools_build_parallel: + name: "Parallel GCC-${{ inputs.build_mode }}-TS=${{ inputs.thread_safety }}d" + # Don't run the action if the commit message says to skip CI + if: "!contains(github.event.head_commit.message, 'skip-ci')" + + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # SETUP + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + sudo apt install openmpi-bin openmpi-common mpi-default-dev + echo "CC=mpicc" >> $GITHUB_ENV + echo "FC=mpif90" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + CC=mpicc $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --enable-deprecated-symbols \ + --with-default-api-version=v114 \ + --enable-shared \ + --enable-parallel \ + --disable-cxx \ + --enable-fortran \ + --disable-java \ + --disable-mirror-vfd \ + --disable-direct-vfd \ + --disable-ros3-vfd \ + --with-szlib=yes + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml new file mode 100644 index 0000000..bf53c41 --- /dev/null +++ b/.github/workflows/main-cmake.yml @@ -0,0 +1,251 @@ +name: hdf5 1.14 CMake CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + inputs: + thread_safety: + description: "thread-safety on/off" + required: true + type: boolean + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + + # A workflow that builds the library and runs all the tests + CMake_build_and_test: + strategy: + # The current matrix has one dimensions: + # + # * config name + # + # Most configuration information is added via the 'include' mechanism, + # which will append the key-value pairs in the configuration where the + # names match. + matrix: + name: + - "Windows MSVC" + - "Ubuntu gcc" + - "MacOS Clang" + + # This is where we list the bulk of the options for each configuration. + # The key-value pair values are usually appropriate for being CMake or + # Autotools configure values, so be aware of that. + + include: + + # Windows w/ MSVC + CMake + # + # No Fortran, parallel, or VFDs that rely on POSIX things + - name: "Windows MSVC" + os: windows-2022 + toolchain: "" + cpp: ON + fortran: OFF + java: ON + docs: OFF + libaecfc: ON + localaec: OFF + zlibfc: ON + localzlib: OFF + parallel: OFF + mirror_vfd: OFF + direct_vfd: OFF + ros3_vfd: OFF + generator: "-G \"Visual Studio 17 2022\" -A x64" + run_tests: true + + # Linux (Ubuntu) w/ gcc + CMake + # + # We might think about adding Clang, but MacOS already tests that + # so it's not critical + - name: "Ubuntu gcc" + os: ubuntu-latest + cpp: ON + fortran: ON + java: ON + docs: ON + libaecfc: ON + localaec: OFF + zlibfc: ON + localzlib: OFF + parallel: OFF + mirror_vfd: ON + direct_vfd: ON + ros3_vfd: ON + toolchain: "config/toolchain/gcc.cmake" + generator: "-G Ninja" + run_tests: true + + + # MacOS w/ Clang + CMake + # + # We could also build with the Autotools via brew installing them, + # but that seems unnecessary + - name: "MacOS Clang" + os: macos-13 + cpp: ON + fortran: OFF + java: ON + docs: OFF + libaecfc: ON + localaec: OFF + zlibfc: ON + localzlib: OFF + parallel: OFF + mirror_vfd: ON + direct_vfd: OFF + ros3_vfd: OFF + toolchain: "config/toolchain/clang.cmake" + generator: "-G Ninja" + run_tests: true + + + + # Sets the job's name from the properties + name: "${{ matrix.name }}-${{ inputs.build_mode }}-TS=${{ inputs.thread_safety }}" + + # Don't run the action if the commit message says to skip CI + if: "!contains(github.event.head_commit.message, 'skip-ci')" + + # The type of runner that the job will run on + runs-on: ${{ matrix.os }} + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + + # + # SETUP + # + + #Useful for debugging + - name: Dump matrix context + run: echo '${{ toJSON(matrix) }}' + + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + sudo apt install gcc-12 g++-12 gfortran-12 + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + echo "FC=gfortran-12" >> $GITHUB_ENV + if: matrix.os == 'ubuntu-latest' + + # CMake gets libaec from fetchcontent + + - name: Install Dependencies (Windows) + run: choco install ninja + if: matrix.os == 'windows-latest' + + - name: Install Dependencies (macOS) + run: brew install ninja doxygen + if: matrix.os == 'macos-13' + + - name: Set environment for MSVC (Windows) + run: | + # Set these environment variables so CMake picks the correct compiler + echo "CXX=cl.exe" >> $GITHUB_ENV + echo "CC=cl.exe" >> $GITHUB_ENV + if: matrix.os == 'windows-latest' + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # + # CMAKE CONFIGURE + # + + - name: CMake Configure + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + ${{ matrix.generator }} \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \ + -DBUILD_SHARED_LIBS=ON \ + -DHDF5_ENABLE_ALL_WARNINGS=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=${{ matrix.parallel }} \ + -DHDF5_BUILD_CPP_LIB:BOOL=${{ matrix.cpp }} \ + -DHDF5_BUILD_FORTRAN=${{ matrix.fortran }} \ + -DHDF5_BUILD_JAVA=${{ matrix.java }} \ + -DHDF5_BUILD_DOC=${{ matrix.docs }} \ + -DLIBAEC_USE_LOCALCONTENT=${{ matrix.localaec }} \ + -DZLIB_USE_LOCALCONTENT=${{ matrix.localzlib }} \ + -DHDF5_ENABLE_MIRROR_VFD:BOOL=${{ matrix.mirror_vfd }} \ + -DHDF5_ENABLE_DIRECT_VFD:BOOL=${{ matrix.direct_vfd }} \ + -DHDF5_ENABLE_ROS3_VFD:BOOL=${{ matrix.ros3_vfd }} \ + $GITHUB_WORKSPACE + shell: bash + if: "! (matrix.thread_safety)" + + + - name: CMake Configure (Thread-Safe) + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ + ${{ matrix.generator }} \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \ + -DBUILD_SHARED_LIBS=ON \ + -DHDF5_ENABLE_ALL_WARNINGS=ON \ + -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ + -DHDF5_ENABLE_PARALLEL:BOOL=${{ matrix.parallel }} \ + -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ + -DHDF5_BUILD_FORTRAN:BOOL=OFF \ + -DHDF5_BUILD_JAVA:BOOL=OFF \ + -DHDF5_BUILD_HL_LIB:BOOL=OFF \ + -DHDF5_BUILD_DOC=OFF \ + -DLIBAEC_USE_LOCALCONTENT=${{ matrix.localaec }} \ + -DZLIB_USE_LOCALCONTENT=${{ matrix.localzlib }} \ + -DHDF5_ENABLE_MIRROR_VFD:BOOL=${{ matrix.mirror_vfd }} \ + -DHDF5_ENABLE_DIRECT_VFD:BOOL=${{ matrix.direct_vfd }} \ + -DHDF5_ENABLE_ROS3_VFD:BOOL=${{ matrix.ros3_vfd }} \ + $GITHUB_WORKSPACE + shell: bash + if: (matrix.thread_safety) + + # + # BUILD + # + + - name: CMake Build + run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + # + # RUN TESTS + # + + # NORMAL + + - name: CMake Run Tests + run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + if: (matrix.run_tests) && ! (matrix.thread_safety) + + # THREAD-SAFE + + - name: CMake Run Thread-Safe Tests + run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -R ttsafe + working-directory: ${{ runner.workspace }}/build + if: (matrix.run_tests) && (matrix.thread_safety) + + # + # INSTALL (note that this runs even when we don't run the tests) + # diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9944784..e8921bd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,621 +27,10 @@ permissions: # in parallel. We just have one job, but the matrix items defined below will # run in parallel. jobs: + workflow-autotools: + name: "Autotools Workflows" + uses: ./.github/workflows/autotools.yml - # A workflow that builds the library and runs all the tests - build_and_test: - - strategy: - - # The current matrix has three dimensions: - # - # * config name - # * thread-safety on/off - # * release vs. debug build - # - # Most configuration information is added via the 'include' mechanism, - # which will append the key-value pairs in the configuration where the - # names match. - - matrix: - - name: - - "Windows MSVC CMake" - - "Ubuntu gcc CMake" - - "Ubuntu gcc Autotools" - - "Ubuntu gcc Autotools parallel (build only)" - - "MacOS Clang CMake" - - thread_safety: - - enabled: true - text: " TS" - - enabled: false - text: "" - - build_mode: - - text: " REL" - cmake: "Release" - autotools: "production" - - text: " DBG" - cmake: "Debug" - autotools: "debug" - - # This is where we list the bulk of the options for each configuration. - # The key-value pair values are usually appropriate for being CMake or - # Autotools configure values, so be aware of that. - - include: - - # Windows w/ MSVC + CMake - # - # No Fortran, parallel, or VFDs that rely on POSIX things - - name: "Windows MSVC CMake" - os: windows-2022 - toolchain: "" - cpp: ON - fortran: OFF - java: ON - docs: OFF - libaecfc: ON - localaec: OFF - zlibfc: ON - localzlib: OFF - parallel: OFF - mirror_vfd: OFF - direct_vfd: OFF - ros3_vfd: OFF - generator: "-G \"Visual Studio 17 2022\" -A x64" - run_tests: true - - # Linux (Ubuntu) w/ gcc + CMake - # - # We might think about adding Clang, but MacOS already tests that - # so it's not critical - - name: "Ubuntu gcc CMake" - os: ubuntu-latest - cpp: ON - fortran: ON - java: ON - docs: ON - libaecfc: ON - localaec: OFF - zlibfc: ON - localzlib: OFF - parallel: OFF - mirror_vfd: ON - direct_vfd: ON - ros3_vfd: OFF - toolchain: "config/toolchain/gcc.cmake" - generator: "-G Ninja" - run_tests: true - - # Linux (Ubuntu) w/ gcc + Autotools - # - # Keep this identical to the CMake configs. Note the difference in - # the values. - - name: "Ubuntu gcc Autotools" - os: ubuntu-latest - cpp: enable - fortran: enable - java: enable - docs: disable - parallel: disable - mirror_vfd: enable - direct_vfd: enable - ros3_vfd: enable - deprec_sym: enable - default_api: v114 - szip: yes - toolchain: "" - generator: "autogen" - flags: "" - run_tests: true - - # Parallel Linux (Ubuntu) w/ gcc + Autotools - # - # The GitHub runners are inadequate for running parallel HDF5 tests, - # so we catch most issues in daily testing. What we have here is just - # a compile check to make sure nothing obvious is broken. - - name: "Ubuntu gcc Autotools parallel (build only)" - os: ubuntu-latest - cpp: disable - fortran: enable - java: disable - docs: disable - parallel: enable - mirror_vfd: disable - direct_vfd: disable - ros3_vfd: disable - deprec_sym: enable - default_api: v114 - szip: yes - toolchain: "" - generator: "autogen" - flags: "CC=mpicc" - run_tests: false - - # MacOS w/ Clang + CMake - # - # We could also build with the Autotools via brew installing them, - # but that seems unnecessary - - name: "MacOS Clang CMake" - os: macos-13 - cpp: ON - fortran: OFF - java: ON - docs: OFF - libaecfc: ON - localaec: OFF - zlibfc: ON - localzlib: OFF - parallel: OFF - mirror_vfd: ON - direct_vfd: OFF - ros3_vfd: OFF - toolchain: "config/toolchain/clang.cmake" - generator: "-G Ninja" - run_tests: true - - - # - # SPECIAL AUTOTOOLS BUILDS - # - # These do not run tests and are not built into the matrix and instead - # become NEW configs as their name would clobber one of the matrix - # names (so make sure the names are UNIQUE). - # - - - name: "Ubuntu gcc Autotools v1.6 default API (build only)" - os: ubuntu-latest - cpp: enable - fortran: enable - java: enable - docs: disable - parallel: disable - mirror_vfd: enable - direct_vfd: enable - ros3_vfd: enable - deprec_sym: enable - default_api: v16 - szip: yes - toolchain: "" - generator: "autogen" - flags: "" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - - name: "Ubuntu gcc Autotools v1.8 default API (build only)" - os: ubuntu-latest - cpp: enable - fortran: enable - java: enable - docs: disable - parallel: disable - mirror_vfd: enable - direct_vfd: enable - ros3_vfd: enable - deprec_sym: enable - default_api: v18 - szip: yes - toolchain: "" - generator: "autogen" - flags: "" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - - name: "Ubuntu gcc Autotools v1.10 default API (build only)" - os: ubuntu-latest - cpp: enable - fortran: enable - java: enable - docs: disable - parallel: disable - mirror_vfd: enable - direct_vfd: enable - ros3_vfd: enable - deprec_sym: enable - default_api: v110 - szip: yes - toolchain: "" - generator: "autogen" - flags: "" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - - name: "Ubuntu gcc Autotools v1.12 default API (build only)" - os: ubuntu-latest - cpp: enable - fortran: enable - java: enable - docs: disable - parallel: disable - mirror_vfd: enable - direct_vfd: enable - ros3_vfd: enable - deprec_sym: enable - default_api: v112 - szip: yes - toolchain: "" - generator: "autogen" - flags: "" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - - name: "Ubuntu gcc Autotools no deprecated symbols (build only)" - os: ubuntu-latest - cpp: enable - fortran: enable - java: enable - docs: disable - parallel: disable - mirror_vfd: enable - direct_vfd: enable - ros3_vfd: enable - deprec_sym: disable - default_api: default - szip: yes - toolchain: "" - generator: "autogen" - flags: "" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - # Debug -Werror - - name: "Ubuntu gcc Autotools -Werror (build only)" - os: ubuntu-latest - cpp: enable - fortran: disable - java: enable - docs: disable - parallel: disable - mirror_vfd: disable - direct_vfd: enable - ros3_vfd: disable - deprec_sym: enable - default_api: v114 - szip: yes - toolchain: "" - generator: "autogen" - flags: "CFLAGS=-Werror" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - # Production/Release -Werror - - name: "Ubuntu gcc Autotools -Werror (build only)" - os: ubuntu-latest - cpp: enable - fortran: disable - java: enable - docs: disable - parallel: disable - mirror_vfd: disable - direct_vfd: enable - ros3_vfd: disable - deprec_sym: enable - default_api: v114 - szip: yes - toolchain: "" - generator: "autogen" - flags: "CFLAGS=-Werror" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " REL" - cmake: "Release" - autotools: "production" - - # Parallel Debug -Werror - - name: "Ubuntu gcc Autotools parallel -Werror (build only)" - os: ubuntu-latest - cpp: disable - fortran: disable - java: disable - docs: disable - parallel: enable - mirror_vfd: disable - direct_vfd: enable - ros3_vfd: disable - deprec_sym: enable - default_api: v114 - toolchain: "" - generator: "autogen" - flags: "CFLAGS=-Werror" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " DBG" - cmake: "Debug" - autotools: "debug" - - # Parallel production/release -Werror - - name: "Ubuntu gcc Autotools parallel -Werror (build only)" - os: ubuntu-latest - cpp: disable - fortran: disable - java: disable - docs: disable - parallel: enable - mirror_vfd: disable - direct_vfd: enable - ros3_vfd: disable - deprec_sym: enable - default_api: v114 - toolchain: "" - generator: "autogen" - flags: "CFLAGS=-Werror" - run_tests: false - thread_safety: - enabled: false - text: "" - build_mode: - text: " REL" - cmake: "Release" - autotools: "production" - - # Sets the job's name from the properties - name: "${{ matrix.name }}${{ matrix.build_mode.text }}${{ matrix.thread_safety.text }}" - - # Don't run the action if the commit message says to skip CI - if: "!contains(github.event.head_commit.message, 'skip-ci')" - - # The type of runner that the job will run on - runs-on: ${{ matrix.os }} - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - - # - # SETUP - # - - #Useful for debugging - - name: Dump matrix context - run: echo '${{ toJSON(matrix) }}' - - # Only CMake need ninja-build, but we just install it unilaterally - # libssl, etc. are needed for the ros3 VFD - - name: Install Linux Dependencies - run: | - sudo apt update - sudo apt-get install ninja-build doxygen graphviz - sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev - sudo apt install gcc-12 g++-12 gfortran-12 - echo "CC=gcc-12" >> $GITHUB_ENV - echo "CXX=g++-12" >> $GITHUB_ENV - echo "FC=gfortran-12" >> $GITHUB_ENV - if: matrix.os == 'ubuntu-latest' - - # CMake gets libaec from fetchcontent - - name: Install Autotools Dependencies (Linux) - run: | - sudo apt install automake autoconf libtool libtool-bin - sudo apt install libaec0 libaec-dev - if: (matrix.generator == 'autogen') - - - name: Install Autotools Dependencies (Linux, parallel) - run: | - sudo apt install openmpi-bin openmpi-common mpi-default-dev - echo "CC=mpicc" >> $GITHUB_ENV - echo "FC=mpif90" >> $GITHUB_ENV - if: (matrix.generator == 'autogen') && (matrix.parallel == 'enable') - - - name: Install Dependencies (Windows) - run: choco install ninja - if: matrix.os == 'windows-latest' - - - name: Install Dependencies (macOS) - run: brew install ninja doxygen - if: matrix.os == 'macos-13' - - - name: Set environment for MSVC (Windows) - run: | - # Set these environment variables so CMake picks the correct compiler - echo "CXX=cl.exe" >> $GITHUB_ENV - echo "CC=cl.exe" >> $GITHUB_ENV - if: matrix.os == 'windows-latest' - - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: Get Sources - uses: actions/checkout@v3 - - # - # AUTOTOOLS CONFIGURE - # - - - name: Autotools Configure - run: | - sh ./autogen.sh - mkdir "${{ runner.workspace }}/build" - cd "${{ runner.workspace }}/build" - ${{ matrix.flags }} $GITHUB_WORKSPACE/configure \ - --enable-build-mode=${{ matrix.build_mode.autotools }} \ - --${{ matrix.deprec_sym }}-deprecated-symbols \ - --with-default-api-version=${{ matrix.default_api }} \ - --enable-shared \ - --${{ matrix.parallel }}-parallel \ - --${{ matrix.cpp }}-cxx \ - --${{ matrix.fortran }}-fortran \ - --${{ matrix.java }}-java \ - --${{ matrix.mirror_vfd }}-mirror-vfd \ - --${{ matrix.direct_vfd }}-direct-vfd \ - --${{ matrix.ros3_vfd }}-ros3-vfd \ - --with-szlib=${{ matrix.szip }} - shell: bash - if: (matrix.generator == 'autogen') && ! (matrix.thread_safety.enabled) - - - name: Autotools Configure (Thread-Safe) - run: | - sh ./autogen.sh - mkdir "${{ runner.workspace }}/build" - cd "${{ runner.workspace }}/build" - ${{ matrix.flags }} $GITHUB_WORKSPACE/configure \ - --enable-build-mode=${{ matrix.build_mode.autotools }} \ - --enable-shared \ - --enable-threadsafe \ - --disable-hl \ - --${{ matrix.parallel }}-parallel \ - --${{ matrix.mirror_vfd }}-mirror-vfd \ - --${{ matrix.direct_vfd }}-direct-vfd \ - --${{ matrix.ros3_vfd }}-ros3-vfd \ - --with-szlib=${{ matrix.szip }} - shell: bash - if: (matrix.generator == 'autogen') && (matrix.thread_safety.enabled) - - # - # CMAKE CONFIGURE - # - - - name: CMake Configure - run: | - mkdir "${{ runner.workspace }}/build" - cd "${{ runner.workspace }}/build" - cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ - ${{ matrix.generator }} \ - -DCMAKE_BUILD_TYPE=${{ matrix.build_mode.cmake }} \ - -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \ - -DBUILD_SHARED_LIBS=ON \ - -DHDF5_ENABLE_ALL_WARNINGS=ON \ - -DHDF5_ENABLE_PARALLEL:BOOL=${{ matrix.parallel }} \ - -DHDF5_BUILD_CPP_LIB:BOOL=${{ matrix.cpp }} \ - -DHDF5_BUILD_FORTRAN=${{ matrix.fortran }} \ - -DHDF5_BUILD_JAVA=${{ matrix.java }} \ - -DHDF5_BUILD_DOC=${{ matrix.docs }} \ - -DBUILD_SZIP_WITH_FETCHCONTENT=${{ matrix.libaecfc }} \ - -DLIBAEC_USE_LOCALCONTENT=${{ matrix.localaec }} \ - -DBUILD_ZLIB_WITH_FETCHCONTENT=${{ matrix.zlibfc }} \ - -DZLIB_USE_LOCALCONTENT=${{ matrix.localzlib }} \ - -DHDF5_ENABLE_MIRROR_VFD:BOOL=${{ matrix.mirror_vfd }} \ - -DHDF5_ENABLE_DIRECT_VFD:BOOL=${{ matrix.direct_vfd }} \ - -DHDF5_ENABLE_ROS3_VFD:BOOL=${{ matrix.ros3_vfd }} \ - $GITHUB_WORKSPACE - shell: bash - if: (matrix.generator != 'autogen') && ! (matrix.thread_safety.enabled) - - - # NOTE: Windows does not support static + thread-safe - - name: CMake Configure (Thread-Safe) - run: | - mkdir "${{ runner.workspace }}/build" - cd "${{ runner.workspace }}/build" - cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \ - ${{ matrix.generator }} \ - -DCMAKE_BUILD_TYPE=${{ matrix.build_mode.cmake }} \ - -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \ - -DBUILD_SHARED_LIBS=ON \ - -DBUILD_STATIC_LIBS=OFF \ - -DHDF5_ENABLE_ALL_WARNINGS=ON \ - -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ - -DHDF5_ENABLE_PARALLEL:BOOL=${{ matrix.parallel }} \ - -DHDF5_BUILD_CPP_LIB:BOOL=OFF \ - -DHDF5_BUILD_FORTRAN:BOOL=OFF \ - -DHDF5_BUILD_JAVA:BOOL=OFF \ - -DHDF5_BUILD_HL_LIB:BOOL=OFF \ - -DHDF5_BUILD_DOC=OFF \ - -DBUILD_SZIP_WITH_FETCHCONTENT=${{ matrix.libaecfc }} \ - -DLIBAEC_USE_LOCALCONTENT=${{ matrix.localaec }} \ - -DBUILD_ZLIB_WITH_FETCHCONTENT=${{ matrix.zlibfc }} \ - -DZLIB_USE_LOCALCONTENT=${{ matrix.localzlib }} \ - -DHDF5_ENABLE_MIRROR_VFD:BOOL=${{ matrix.mirror_vfd }} \ - -DHDF5_ENABLE_DIRECT_VFD:BOOL=${{ matrix.direct_vfd }} \ - -DHDF5_ENABLE_ROS3_VFD:BOOL=${{ matrix.ros3_vfd }} \ - $GITHUB_WORKSPACE - shell: bash - if: (matrix.generator != 'autogen') && (matrix.thread_safety.enabled) - - # - # BUILD - # - - - name: Autotools Build - run: make -j3 - working-directory: ${{ runner.workspace }}/build - if: matrix.generator == 'autogen' - - - name: CMake Build - run: cmake --build . --parallel 3 --config ${{ matrix.build_mode.cmake }} - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator != 'autogen') - - # - # RUN TESTS - # - - # NORMAL - - - name: Autotools Run Tests - run: make check -j2 - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') && (matrix.run_tests) && ! (matrix.thread_safety.enabled) - - - name: CMake Run Tests - run: ctest . --parallel 2 -C ${{ matrix.build_mode.cmake }} -V - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator != 'autogen') && (matrix.run_tests) && ! (matrix.thread_safety.enabled) - - # THREAD-SAFE - - - name: Autotools Run Thread-Safe Tests - run: | - cd test - ./ttsafe - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') && (matrix.run_tests) && (matrix.thread_safety.enabled) - - - name: CMake Run Thread-Safe Tests - run: ctest . --parallel 2 -C ${{ matrix.build_mode.cmake }} -V -R ttsafe - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator != 'autogen') && (matrix.run_tests) && (matrix.thread_safety.enabled) - - # - # INSTALL (note that this runs even when we don't run the tests) - # - - - name: Autotools Install - run: make install - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') - - - name: Autotools Verify Install - run: make check-install - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') + workflow-cmake: + name: "CMake Workflows" + uses: ./.github/workflows/cmake.yml diff --git a/.github/workflows/netcdf.yml b/.github/workflows/netcdf.yml index a7c9923..5dd3a66 100644 --- a/.github/workflows/netcdf.yml +++ b/.github/workflows/netcdf.yml @@ -31,7 +31,7 @@ jobs: 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 libtool libtool-bin - name: Checkout HDF5 - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install HDF5 run: | ./autogen.sh @@ -39,7 +39,7 @@ jobs: make -j sudo make install -j - name: Checkout netCDF - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: unidata/netcdf-c path: netcdf-c diff --git a/.github/workflows/release-files.yml b/.github/workflows/release-files.yml index 4473b42..c80526a 100644 --- a/.github/workflows/release-files.yml +++ b/.github/workflows/release-files.yml @@ -1,4 +1,4 @@ -name: hdf5 1.14 release +name: hdf5 1.14 release-files # Controls when the action will run. Triggers the workflow on a schedule on: @@ -40,7 +40,7 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 138fe00..62a8778 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,7 +50,7 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: hdfsrc diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 0000000..2803e7f --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,68 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + push: + branches: [ "hdf5_1_14" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: "Checkout code" + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecard on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4 + with: + sarif_file: results.sarif diff --git a/.github/workflows/tarball.yml b/.github/workflows/tarball.yml index 0bc2100..d6c1298 100644 --- a/.github/workflows/tarball.yml +++ b/.github/workflows/tarball.yml @@ -83,7 +83,7 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: hdfsrc |