1name: zfs-linux-tests
2
3on:
4  workflow_call:
5    inputs:
6      os:
7        description: 'The ubuntu version: 20.02 or 22.04'
8        required: true
9        type: string
10
11jobs:
12
13  zloop:
14    runs-on: ubuntu-${{ inputs.os }}
15    steps:
16    - uses: actions/checkout@v4
17      with:
18        ref: ${{ github.event.pull_request.head.sha }}
19    - uses: actions/download-artifact@v4
20      with:
21        name: modules-${{ inputs.os }}
22    - name: Install modules
23      run: |
24        tar xzf modules-${{ inputs.os }}.tgz
25        .github/workflows/scripts/setup-dependencies.sh tests
26    - name: Tests
27      timeout-minutes: 30
28      run: |
29        sudo mkdir -p /var/tmp/zloop
30        # run for 10 minutes or at most 2 iterations for a maximum runner
31        #   time of 20 minutes.
32        sudo /usr/share/zfs/zloop.sh -t 600 -I 2 -l -m1 -- -T 120 -P 60
33    - name: Prepare artifacts
34      if: failure()
35      run: |
36        sudo chmod +r -R /var/tmp/zloop/
37    - uses: actions/upload-artifact@v4
38      if: failure()
39      with:
40        name: Zpool-logs-${{ inputs.os }}
41        path: |
42          /var/tmp/zloop/*/
43          !/var/tmp/zloop/*/vdev/
44        retention-days: 14
45        if-no-files-found: ignore
46    - uses: actions/upload-artifact@v4
47      if: failure()
48      with:
49        name: Zpool-files-${{ inputs.os }}
50        path: |
51          /var/tmp/zloop/*/vdev/
52        retention-days: 14
53        if-no-files-found: ignore
54
55  sanity:
56    runs-on: ubuntu-${{ inputs.os }}
57    steps:
58    - uses: actions/checkout@v4
59      with:
60        ref: ${{ github.event.pull_request.head.sha }}
61    - uses: actions/download-artifact@v4
62      with:
63        name: modules-${{ inputs.os }}
64    - name: Install modules
65      run: |
66        tar xzf modules-${{ inputs.os }}.tgz
67        .github/workflows/scripts/setup-dependencies.sh tests
68    - name: Tests
69      timeout-minutes: 60
70      shell: bash
71      run: |
72        set -o pipefail
73        /usr/share/zfs/zfs-tests.sh -vKR -s 3G -r sanity | scripts/zfs-tests-color.sh
74    - name: Prepare artifacts
75      if: success() || failure()
76      run: |
77        RESPATH="/var/tmp/test_results"
78        mv -f $RESPATH/current $RESPATH/testfiles
79        tar cf $RESPATH/sanity.tar -h -C $RESPATH testfiles
80    - uses: actions/upload-artifact@v4
81      if: success() || failure()
82      with:
83        name: Logs-${{ inputs.os }}-sanity
84        path: /var/tmp/test_results/sanity.tar
85        if-no-files-found: ignore
86
87  functional:
88    runs-on: ubuntu-${{ inputs.os }}
89    strategy:
90      fail-fast: false
91      matrix:
92        tests: [ part1, part2, part3, part4 ]
93    steps:
94    - uses: actions/checkout@v4
95      with:
96        ref: ${{ github.event.pull_request.head.sha }}
97    - uses: actions/download-artifact@v4
98      with:
99        name: modules-${{ inputs.os }}
100    - name: Install modules
101      run: |
102        tar xzf modules-${{ inputs.os }}.tgz
103        .github/workflows/scripts/setup-dependencies.sh tests
104    - name: Setup tests
105      run: |
106        .github/workflows/scripts/setup-functional.sh ${{ matrix.tests }} >> $GITHUB_ENV
107    - name: Tests
108      timeout-minutes: 120
109      shell: bash
110      run: |
111        set -o pipefail
112        /usr/share/zfs/zfs-tests.sh -vKR -s 3G -T ${{ env.TODO }} | scripts/zfs-tests-color.sh
113    - name: Prepare artifacts
114      if: success() || failure()
115      run: |
116        RESPATH="/var/tmp/test_results"
117        mv -f $RESPATH/current $RESPATH/testfiles
118        tar cf $RESPATH/${{ matrix.tests }}.tar -h -C $RESPATH testfiles
119    - uses: actions/upload-artifact@v4
120      if: success() || failure()
121      with:
122        name: Logs-${{ inputs.os }}-functional-${{ matrix.tests }}
123        path: /var/tmp/test_results/${{ matrix.tests }}.tar
124        if-no-files-found: ignore
125