Skip to content

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

ZTS: Use QEMU for tests on Linux and FreeBSD

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

Workflow file for this run

name: zfs-qemu
on:
push:
pull_request:
jobs:
qemu-vm:
name: QEMU
strategy:
fail-fast: false
matrix:
os: [almalinux8, almalinux9, archlinux, centos-stream9, fedora39, fedora40, debian11, debian12, freebsd13, freebsd14, freebsd15, ubuntu22, ubuntu24]
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup QEMU
timeout-minutes: 15
run: .github/workflows/scripts/qemu-1-setup.sh
- name: Start build machine
timeout-minutes: 5
run: .github/workflows/scripts/qemu-2-start.sh ${{ matrix.os }}
- name: Install dependencies
timeout-minutes: 30
run: |
echo "Install dependencies in QEMU machine"
echo "ConnectTimeout 1" >> $HOME/.ssh/config
echo "StrictHostKeyChecking no" >> $HOME/.ssh/config
while pidof /usr/bin/qemu-system-x86_64 >/dev/null; do
ssh 2>/dev/null [email protected] "uname -a" && break
done
scp .github/workflows/scripts/qemu-3-deps.sh [email protected]:qemu-3-deps.sh
PID=`pidof /usr/bin/qemu-system-x86_64`
ssh [email protected] '$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"
- name: Build modules
timeout-minutes: 30
run: |
echo "Build modules in QEMU machine"
sudo virsh start openzfs
while pidof /usr/bin/qemu-system-x86_64 >/dev/null; do
ssh 2>/dev/null [email protected] "uname -a" && break
done
rsync -ar $HOME/work/zfs/zfs [email protected]:./
ssh [email protected] '$HOME/zfs/.github/workflows/scripts/qemu-4-build.sh' ${{ matrix.os }}
- name: Setup testing machines
timeout-minutes: 10
run: |
.github/workflows/scripts/qemu-5-setup.sh
# Save the VM's serial output (ttyS0) to /var/tmp/console.txt
# - ttyS0 on the VM corresponds to a local /dev/pty/N entry
# - use 'virsh ttyconsole' to lookup the /dev/pty/N entry
RESPATH="/var/tmp/test_results"
mkdir -p $RESPATH/vm{1,2,3}
sudo mkdir -p /var/tmp
read "pty1" <<< $(sudo virsh ttyconsole "vm1")
read "pty2" <<< $(sudo virsh ttyconsole "vm2")
read "pty3" <<< $(sudo virsh ttyconsole "vm3")
sudo nohup bash -c "cat "$pty1" > $RESPATH/vm1/console.txt" &
sudo nohup bash -c "cat "$pty2" > $RESPATH/vm2/console.txt" &
sudo nohup bash -c "cat "$pty3" > $RESPATH/vm3/console.txt" &
echo "Console logging for $pty1, $pty2 and $pty3 started."
- name: Run tests
timeout-minutes: 240
run: |
.github/workflows/scripts/qemu-6-tests.sh
- name: Test reports
timeout-minutes: 10
run: |
.github/workflows/scripts/qemu-7-reports.sh
- name: Prepare artifacts
if: success() || failure()
run: |
RESPATH="/var/tmp/test_results"
rsync -arL [email protected]:$RESPATH/current $RESPATH/vm1 || true
rsync -arL [email protected]:$RESPATH/current $RESPATH/vm2 || true
rsync -arL [email protected]:$RESPATH/current $RESPATH/vm3 || true
scp [email protected]:"/var/tmp/*.txt" $RESPATH/vm1 || true
scp [email protected]:"/var/tmp/*.txt" $RESPATH/vm2 || true
scp [email protected]:"/var/tmp/*.txt" $RESPATH/vm3 || true
cp -f /var/tmp/*.txt $RESPATH || true
ls -la /var/tmp
tar cf qemu-${{ matrix.os }}.tar -C $RESPATH -h . || true
- uses: actions/upload-artifact@v4
if: success() || failure()
with:
name: Logs-functional-${{ matrix.os }}
path: qemu-${{ matrix.os }}.tar
if-no-files-found: ignore
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/generate-summary.sh
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 1
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 2
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 3
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 4
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 5
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 6
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 7
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 8
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 9
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 10
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 11
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 12
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 13
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 14
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 15
- name: Generating summary...
run: .github/workflows/scripts/generate-summary.sh 16
- name: Generating summary...
- uses: actions/upload-artifact@v4
with:
name: Summary Files
path: out-*