Skip to content

Merge summaries

Merge summaries #98

Workflow file for this run

name: zfs-qemu
on:
# push:
pull_request:
jobs:
qemu-vm:
name: QEMU
# Number of VMs to spawn per github runner. The ZTS tests are split
# up and run across this number of VMs.
env:
num_vms: 2
strategy:
fail-fast: false
matrix:
# os: [almalinux8, almalinux9, archlinux, centos-stream9, fedora39, fedora40, debian11, debian12, freebsd13, freebsd14, freebsd15, ubuntu22, ubuntu24]
# os: [almalinux8, almalinux9, fedora39, fedora40, debian11, debian12, freebsd13, freebsd14, freebsd15, ubuntu22, ubuntu24]
os: [almalinux8, almalinux9, fedora39, fedora40, freebsd13, freebsd14, freebsd15, ubuntu22, ubuntu24]
# os: [almalinux8]
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"
echo "ConnectTimeout 1" >> $HOME/.ssh/config
echo "StrictHostKeyChecking no" >> $HOME/.ssh/config
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"
- name: Build modules
timeout-minutes: 30
run: |
echo "Build modules in QEMU machine"
sudo virsh start openzfs
rm -f $HOME/.ssh/known_hosts
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 ${{ ENV.num_vms }}
echo "setting up serial consoles"
# 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 /var/tmp
NVMS=${{ ENV.num_vms }}
echo "begin loop, $NVMS"
sudo virsh list
ls -l /home/runner/work/_temp/*.sh
echo "--"
cat "/home/runner/work/_temp/$(ls -Str /home/runner/work/_temp/ | tail -n 1)"
echo "--"
VALS="$(seq 1 ${{ ENV.num_vms }})"
for i in $VALS ; do
echo "Starting up console $i"
mkdir -p "$RESPATH/vm$i"
read pty <<< $(sudo virsh ttyconsole "vm$i")
echo "VM$i pty is $pty"
sudo nohup bash -c "cat $pty" > $RESPATH/vm$i/console.txt &
echo "next VM"
done
echo "Console logging for ${{ matrix.os }} VMs started."
- name: Run tests
timeout-minutes: 270
run: |
.github/workflows/scripts/qemu-6-tests.sh ${{ ENV.num_vms }}
- name: Test reports
timeout-minutes: 10
run: |
.github/workflows/scripts/qemu-7-reports.sh ${{ ENV.num_vms }}
- name: Prepare artifacts
timeout-minutes: 10
if: success() || failure()
run: |
ZFSDIR="$(pwd)"
RESPATH="/var/tmp/test_results"
for i in $(seq 1 ${{ ENV.num_vms }}) ; do
rsync -arL [email protected]$i:$RESPATH/current $RESPATH/vm$i || true
scp [email protected]$i:"/var/tmp/*.txt" $RESPATH/vm$i || true
done
echo "Preparing summary"
cat /var/tmp/vm*log.txt | grep -v 'Test[ :]' | \
sed -e 's/\x1b\[[0-9;]*m//g' | \
$ZFSDIR/.github/workflows/scripts/merge_summary.awk | \
$ZFSDIR/scripts/zfs-tests-color.sh > $RESPATH/summary.txt
awk '/\[FAIL\]|\[KILLED\]/{ show=1; print; next; }; /\[SKIP\]|\[PASS\]/{ show=0; } show' \
$RESPATH/vm*/current/log >> $RESPATH/summary.txt
cd "$ZFSDIR"
cp -f /var/tmp/*.txt $RESPATH || true
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
- name: Summary report
if: success() || failure()
run: |
cat /var/tmp/test_results/summary.txt
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-*