name: Test HDF5 cache VOL

# Controls when the action will run. 
on:
  push:
    branches: [ master ]
  # Allows you to run this workflow manually from the Actions tab    
  workflow_dispatch:
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    steps:
    - name: Checkout vol-tests
      uses: actions/checkout@v2
    - name: Checkout HDF5
      uses: actions/checkout@v2
      with:
        repository: HDFGroup/hdf5
        path: hdf5
    - name: Checkout Argobots
      uses: actions/checkout@v3
      with:
        repository: pmodels/argobots
        path: abt
    - name: Checkout vol-async
      uses: actions/checkout@v3
      with:
        repository: hpc-io/vol-async
        path: vol-async
    - name: Checkout vol-cache
      uses: actions/checkout@v3
      with:
        repository: hpc-io/vol-cache
        path: vol-cache

    - name: Install dependencies
      run: sudo apt-get install ninja-build automake autoconf libtool libtool-bin libopenmpi-dev
    - name: Install HDF5
      run: |
        mkdir hdf5/build
        cd hdf5/build
        cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_STATIC_LIBS=OFF -DHDF5_ENABLE_PARALLEL:BOOL=ON -DHDF5_ENABLE_THREADSAFE:BOOL=ON -DALLOW_UNSUPPORTED:BOOL=ON ..
        sudo make -j2 install
        cd ..
        git rev-parse HEAD > git.txt
    - name: Install Argobots
      run: |
        cd abt
        ./autogen.sh
        ./configure --prefix=/usr/local
        make -j2
        sudo make -j2 install
        cd ..
    - name: Install vol-async
      env:
        CXX: mpic++
        CC: mpicc
      run: |
        mkdir vol-async/build
        cd vol-async/build
        cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
        sudo make -j2 install
        cd ..
    - name: Install vol-cache
      env:
        CXX: mpic++
        CC: mpicc
      run: |
        mkdir vol-cache/build
        cd vol-cache/build
        cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_TESTING:BOOL=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..
        sudo make -j2 install
        cd ..
    - name: Build VOL tests
      run: |
        pwd
        ls
        ls /usr/local/lib
        set
        mkdir -p build
        cd build
        cmake .. -DHDF5_DIR=/usr/local -DHDF5_VOL_TEST_ENABLE_PARALLEL:BOOL=ON -DHDF5_VOL_TEST_ENABLE_ASYNC:BOOL=ON -DHDF5_VOL_TEST_ENABLE_PART:BOOL=ON
        make -j2

    - name: Test against VOL tests (setup environment)
      run: |
        echo "HDF5_PLUGIN_PATH=/usr/local/lib" >> "$GITHUB_ENV"
        echo "HDF5_VOL_CONNECTOR=cache_ext config=$GITHUB_WORKSPACE/config1.cfg;under_vol=0;under_info={};" >> "$GITHUB_ENV"
    - name: Test against VOL tests
      env:
        LD_LIBRARY_PATH: /usr/local/lib
        HDF5_PLUGIN_PATH: /usr/local/lib
      run: |
        mkdir -p $GITHUB_WORKSPACE/scratch
        touch $GITHUB_WORKSPACE/config1.cfg
        echo "HDF5_CACHE_STORAGE_SCOPE: LOCAL" >> $GITHUB_WORKSPACE/config1.cfg
        echo "HDF5_CACHE_STORAGE_PATH: $GITHUB_WORKSPACE/scratch" >> $GITHUB_WORKSPACE/config1.cfg
        echo "HDF5_CACHE_STORAGE_SIZE: 4294967296" >> $GITHUB_WORKSPACE/config1.cfg
        echo "HDF5_CACHE_STORAGE_TYPE: SSD" >> $GITHUB_WORKSPACE/config1.cfg
        echo "HDF5_CACHE_REPLACEMENT_POLICY: LRU" >> $GITHUB_WORKSPACE/config1.cfg
        cd build
        ctest -V
    - name: Test against VOL tests (stacked on top of Async VOL) (setup environment)
      run: |
        echo "HDF5_PLUGIN_PATH=/usr/local/lib" >> "$GITHUB_ENV"
        echo "HDF5_VOL_CONNECTOR=cache_ext config=$GITHUB_WORKSPACE/config2.cfg;under_vol=512;under_info={under_vol=0;under_info={}};" >> $GITHUB_ENV
    - name: Test against VOL tests (stacked on top of Async VOL)
      env:
        LD_LIBRARY_PATH: /usr/local/lib
        HDF5_PLUGIN_PATH: /usr/local/lib
      run: |       
        mkdir -p $GITHUB_WORKSPACE/scratch
        touch $GITHUB_WORKSPACE/config2.cfg
        echo "HDF5_CACHE_STORAGE_SCOPE: LOCAL" >> $GITHUB_WORKSPACE/config2.cfg
        echo "HDF5_CACHE_STORAGE_PATH: $GITHUB_WORKSPACE/scratch" >> $GITHUB_WORKSPACE/config2.cfg
        echo "HDF5_CACHE_STORAGE_SIZE: 4294967296" >> $GITHUB_WORKSPACE/config2.cfg
        echo "HDF5_CACHE_STORAGE_TYPE: SSD" >> $GITHUB_WORKSPACE/config2.cfg
        echo "HDF5_CACHE_REPLACEMENT_POLICY: LRU" >> $GITHUB_WORKSPACE/config2.cfg
        cd build
        ctest -V

    - name: Upload
      uses: actions/upload-artifact@v2
      with:
        name: git.txt
        path: ${{ runner.workspace }}/vol-tests/hdf5/git.txt