Skip to content

ZTS: Use QEMU for tests on Linux and FreeBSD #15

ZTS: Use QEMU for tests on Linux and FreeBSD

ZTS: Use QEMU for tests on Linux and FreeBSD #15

Workflow file for this run

name: zfs-qemu
on:
push:
pull_request:
jobs:
qemu-vm:
name: qemu-vm
strategy:
fail-fast: false
matrix:
# all:
# os: [almalinux8, almalinux9, archlinux, centos-stream9, fedora39, fedora40, debian11, debian12, freebsd13, freebsd13r, freebsd14, freebsd14r, freebsd15, ubuntu20, ubuntu22, ubuntu24]
# openzfs:
os: [almalinux8, almalinux9, centos-stream9, fedora39, fedora40, freebsd13, freebsd13r, freebsd14, freebsd14r, freebsd15, ubuntu20, ubuntu22, ubuntu24]
# freebsd:
# os: [freebsd13, freebsd13r, freebsd14, freebsd14r]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup QEMU
timeout-minutes: 10
run: .github/workflows/scripts/qemu-1-setup.sh
- name: Start build machine
timeout-minutes: 10
run: .github/workflows/scripts/qemu-2-start.sh ${{ matrix.os }}
- name: Install dependencies
timeout-minutes: 20
run: |
echo "Install dependencies in QEMU machine"
IP=192.168.122.10
while pidof /usr/bin/qemu-system-x86_64 >/dev/null; do
ssh 2>/dev/null zfs@$IP "uname -a" && break
done
scp .github/workflows/scripts/qemu-3-deps.sh zfs@$IP:qemu-3-deps.sh
PID=`pidof /usr/bin/qemu-system-x86_64`
ssh zfs@$IP '$HOME/qemu-3-deps.sh' ${{ matrix.os }}
# wait for poweroff to succeed
tail --pid=$PID -f /dev/null
sleep 5 # avoid this: "error: Domain is already active"
rm -f $HOME/.ssh/known_hosts
- name: Build modules
timeout-minutes: 30
run: |
echo "Build modules in QEMU machine"
sudo virsh start openzfs
IP=192.168.122.10
while pidof /usr/bin/qemu-system-x86_64 >/dev/null; do
ssh 2>/dev/null zfs@$IP "uname -a" && break
done
rsync -ar $HOME/work/zfs/zfs zfs@$IP:./
ssh zfs@$IP '$HOME/zfs/.github/workflows/scripts/qemu-4-build.sh' ${{ matrix.os }}
- name: Setup testing machines
timeout-minutes: 5
run: .github/workflows/scripts/qemu-5-setup.sh
- name: Run tests
timeout-minutes: 270
run: .github/workflows/scripts/qemu-6-tests.sh ${{ matrix.os }}
- name: Prepare artifacts
if: always()
timeout-minutes: 10
run: .github/workflows/scripts/qemu-7-prepare.sh
- uses: actions/upload-artifact@v4
id: artifact-upload
if: always()
with:
name: Logs-functional-${{ matrix.os }}
path: /tmp/qemu-${{ matrix.os }}.tar
if-no-files-found: ignore
- name: Test Summary
if: success() || failure()
run: |
# overview
P=`pwd`
cd /var/tmp/test_results
cat summary.txt
echo ""
echo "Full logs for download:"
echo '${{ steps.artifact-upload.outputs.artifact-url }}'
echo ""
echo "File listing:"
ls -l
echo ""
# give some debug output also
$P/.github/workflows/scripts/qemu-7-prepare.sh doit
# if build was okay:
if [ -d vm1 ]; then
# Did we have a test failure?
if test -d vm1 && grep -vq 0 vm*/exitcode.txt ; then
echo "One or more tests failed:"
cat summary-failure-logs.txt
# On test failures, the github test results page will autoscroll to the
# bottom of summary-with-logs.txt. The first thing we want to see
# is the summary page of failures so print another copy of it at
# the bottom of the "page" for easy access.
echo ""
cat summary.txt
echo ""
echo "Full logs for download:"
echo '${{ steps.artifact-upload.outputs.artifact-url }}'
false
else
true
fi
fi
cleanup:
if: always()
name: Cleanup
runs-on: ubuntu-latest
needs: [ qemu-vm ]
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/download-artifact@v4
- name: Generating summary
run: .github/workflows/scripts/qemu-8-summary.sh
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 2
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 3
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 4
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 5
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 6
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 7
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 8
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 9
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 10
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 11
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 12
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 13
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 14
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 15
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 16
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 17
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 18
- name: Generating summary...
run: .github/workflows/scripts/qemu-8-summary.sh 19
- uses: actions/upload-artifact@v4
with:
name: Summary Files
path: out-*