name: zloop

on:
  push:
  pull_request:

jobs:
  tests:
    runs-on: ubuntu-22.04
    env:
      TEST_DIR: /var/tmp/zloop
    steps:
    - uses: actions/checkout@v3
      with:
        ref: ${{ github.event.pull_request.head.sha }}
    - name: Install dependencies
      run: |
        sudo apt-get update
        sudo apt-get -qq upgrade
        sudo xargs --arg-file=${{ github.workspace }}/.github/workflows/build-dependencies.txt apt-get install -qq
        sudo apt-get clean
    - name: Autogen.sh
      run: |
        ./autogen.sh
    - name: Configure
      run: |
        ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan
    - name: Make
      run: |
        make -j$(nproc) --no-print-directory --silent pkg-utils pkg-kmod
    - name: Install
      run: |
        sudo dpkg -i *.deb
        # Update order of directories to search for modules, otherwise
        #   Ubuntu will load kernel-shipped ones.
        sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
        sudo depmod
        sudo modprobe zfs
    - name: Tests
      run: |
        sudo mkdir -p $TEST_DIR
        # run for 10 minutes or at most 2 iterations for a maximum runner
        #   time of 20 minutes.
        sudo /usr/share/zfs/zloop.sh -t 600 -I 2 -l -m1 -- -T 120 -P 60
    - name: Prepare artifacts
      if: failure()
      run: |
        sudo chmod +r -R $TEST_DIR/
    - uses: actions/upload-artifact@v3
      if: failure()
      with:
        name: Logs
        path: |
          /var/tmp/zloop/*/
          !/var/tmp/zloop/*/vdev/
        if-no-files-found: ignore
    - uses: actions/upload-artifact@v3
      if: failure()
      with:
        name: Pool files
        path: |
          /var/tmp/zloop/*/vdev/
        if-no-files-found: ignore