# This is a basic workflow to help you get started with Actions name: SEACAS Variant builds # Controls when the action will run. Triggers the workflow on push on: push: branches: - master pull_request: branches: - master jobs: build-deps: runs-on: ubuntu-latest strategy: matrix: compiler: [ gnu, clang, mpi ] hdf5: [ V110 ] netcdf: [ 4.9.2 ] cgns: [ 4.3.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 openmpi-bin libopenmpi-dev ### # Installing TPL ### - name: Cache TPL-${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} id: cache-TPL-mpi uses: actions/cache@v3 with: path: ~/environments/${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} key: TPL-v4-${{ runner.os }}-${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} - name: Build TPL-${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} if: steps.cache-TPL.outputs.cache-hit != 'true' run: | set -x COMPILER=${{ matrix.compiler }} H5VERSION=${{ matrix.hdf5}} GNU_PARALLEL=OFF INSTALL_PATH=${HOME}/environments/${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} ./install-tpl.sh ls ${HOME} && ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} && ls ${HOME}/environments/${{ matrix.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }}/lib build: needs: build-deps # The type of runner that the job will run on name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} strategy: fail-fast: false matrix: hdf5: [ V110 ] netcdf: [ 4.9.2 ] cgns: [ 4.3.0 ] config: - { name: "Debug serial build", os: ubuntu-latest, compiler: "gnu", debug: "YES", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "Debug parallel build", os: ubuntu-latest, compiler: "mpi", debug: "YES", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "Threadsafe ON, No Fortran", os: ubuntu-latest, compiler: "gnu", debug: "YES", threadsafe: "YES", fortran: "NO", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "thread" # address, integer, thread, memory, undefined } - { name: "Threadsafe ON, Parallel, No Fortran", os: ubuntu-latest, compiler: "mpi", debug: "YES", threadsafe: "YES", fortran: "NO", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "thread" # address, integer, thread, memory, undefined } - { name: "Sanitize address, no fortran", os: ubuntu-latest, compiler: "clang", debug: "YES", threadsafe: "NO", fortran: "NO", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "address" # address, integer, thread, memory, undefined } - { name: "Sanitize undefined", os: ubuntu-latest, compiler: "clang", debug: "YES", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "undefined" # address, integer, thread, memory, undefined } - { name: "Sanitize integer", os: ubuntu-latest, compiler: "clang", debug: "YES", threadsafe: "NO", fortran: "NO", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "integer" # address, integer, thread, memory, undefined } - { name: "GTest Enabled", os: ubuntu-latest, compiler: "gnu", debug: "YES", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "YES", extra: "", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "No applications, legacy, or fortran", os: ubuntu-latest, compiler: "clang", debug: "NO", threadsafe: "NO", fortran: "NO", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "APPLICATIONS=NO LEGACY=NO", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "CATALYST2, serial", os: ubuntu-latest, compiler: "clang", debug: "NO", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "YES", gtest: "NO", extra: "", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "KOKKOS, parallel", os: ubuntu-latest, compiler: "mpi", debug: "NO", threadsafe: "NO", fortran: "YES", use_kokkos: "YES", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "No deprecated exodus functions", os: ubuntu-latest, compiler: "mpi", debug: "NO", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "OMIT_DEPRECATED=YES", sanitizer: "NO" # address, integer, thread, memory, undefined } - { name: "Use modern CMake configure of netCDF and HDF5 packages", os: ubuntu-latest, compiler: "mpi", debug: "NO", threadsafe: "NO", fortran: "YES", use_kokkos: "NO", use_adios2: "NO", use_catalyst2: "NO", gtest: "NO", extra: "MODERN=YES", sanitizer: "NO" # address, integer, thread, memory, undefined } 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 openmpi-bin libopenmpi-dev - name: Fetch TPL Cache id: cache-TPL uses: actions/cache@v3 with: path: ~/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} key: TPL-v4-${{ runner.os }}-${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} - name: Check Cache shell: bash -l {0} run: ls ${HOME} && ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} && ls ${HOME}/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }}/lib - name: install additional TPL if: ${{ matrix.config.use_kokkos == 'YES' || matrix.config.use_adios2 == 'YES' || matrix.config.gtest == 'YES' || matrix.config.use_catalyst == 'YES' }} run: | set -x COMPILER=${{ matrix.config.compiler }} KOKKOS=${{ matrix.config.use_kokkos }} ADIOS2=${{ matrix.config.use_adios2 }} CATALYST2=${{ matrix.config.use_catalyst2 }} GNU_PARALLEL=OFF GTEST=${{ matrix.config.gtest }} INSTALL_PATH=${HOME}/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} ./install-tpl.sh ls ${HOME} && ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} && ls ${HOME}/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }}/lib ### # Configure and build ### - name: Run cmake shell: bash -l {0} run: | echo $HOME mkdir build cd build NUMPROCS=2 ${{ matrix.config.extra }} THREADSAFE=${{ matrix.config.threadsafe }} DEBUG=${{ matrix.config.debug }} FORTRAN=${{ matrix.config.fortran }} SANITIZER=${{ matrix.config.sanitizer }} COMPILER=${{ matrix.config.compiler }} INSTALL_PATH=${HOME}/environments/${{ matrix.config.compiler }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}-${{ matrix.cgns }} bash ../cmake-config - name: Build shell: bash -l {0} run: | cd build make -j 4 if: ${{ success() }} - name: Install shell: bash -l {0} run: | cd build make -j 4 install if: ${{ success() }} - name: Run Non-sanitized Tests shell: bash -l {0} run: | cd build ctest -j 4 --output-on-failure if: ${{ success() && matrix.config.sanitizer == 'NO' && matrix.config.threadsafe == 'NO' }} - name: Run sanitized/threadsafe Tests shell: bash -l {0} run: | cd build ctest -j 4 --output-on-failure --exclude-regex test_exo if: ${{ success() && (matrix.config.sanitizer != 'NO' || matrix.config.threadsafe != 'NO') }}