###
# Build hdf5 dependencies and cache them in a combined directory.
###

name: Run CDash Ubuntu/Linux netCDF Tests

on: [workflow_dispatch]
    
env:
  REMOTETESTDOWN: ${{ vars.REMOTETESTDOWN }}

concurrency:  
  group: ${{ github.workflow}}-${{ github.head_ref }}  
  cancel-in-progress: true

jobs:

  build-deps-cdash:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        hdf5: [ 1.10.8, 1.12.2, 1.14.3 ]

    steps:
      - uses: actions/checkout@v4

      - 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@v4
        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.3 ]

    steps:

      - uses: actions/checkout@v4

      - 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@v4
        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.3 ]
     
      steps:          
        - uses: actions/checkout@v4
          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@v4
          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() }}
