ZTS: Use QEMU for tests on Linux and FreeBSD #2
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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-* |