From 6c0c80fb9ad3599403e0a151dff6d04bdff2b6c8 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Wed, 30 Sep 2026 09:02:16 +0200 Subject: [PATCH] fix: a test that aborts fails (exit status of the piped block), vminstall reads the ISO with bsdtar (no loop partitions in CI containers) --- scripts/vmbootloadertest.sh | 4 ++++ scripts/vminstall.sh | 10 +++++++++- scripts/vmsuite.sh | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/scripts/vmbootloadertest.sh b/scripts/vmbootloadertest.sh index db93517..30e5606 100755 --- a/scripts/vmbootloadertest.sh +++ b/scripts/vmbootloadertest.sh @@ -115,7 +115,11 @@ b="$(gssh uname -r)" step "DONE" stop_vm } 2>&1 | tee "$log" | tee >(sed -u "s/^/[$loader] /" >> "$TEST_LOG") | sed 's/\x1b\[[0-9;]*m//g' +rc=${PIPESTATUS[0]} # the test itself: an abort (exit inside the braces) must not pass as 0 failed checks fails="$(grep -c '^FAIL' "$log")" +if [[ $rc -ne 0 && $fails -eq 0 ]]; then + echo "FAIL $loader aborted (exit $rc): $(grep -v '^$' "$log" | tail -n 1)" | tee -a "$log"; fails=1 +fi echo; echo "== $loader: $(grep -c '^PASS' "$log") passed, $fails failed (log: $log)" grep '^FAIL' "$log" exit "$fails" diff --git a/scripts/vminstall.sh b/scripts/vminstall.sh index d3f581c..9d7004d 100755 --- a/scripts/vminstall.sh +++ b/scripts/vminstall.sh @@ -88,7 +88,15 @@ boot="$VM_DIR/iso-boot" mkdir -p "$boot" # One loop setup at a time: parallel installs (vmtest.sh --install) otherwise get "Device or resource busy". exec 9> /tmp/vminstall-iso.lock; flock 9 -if ! command -v udisksctl >/dev/null && [[ $EUID -eq 0 ]]; then +if command -v bsdtar >/dev/null; then + # No loop device, no udisks, no root: libarchive reads the ISO9660 image directly (a CI container has no + # loop partition nodes, so the mounts below can't work there). + mnt="$(mktemp -d)" + cleanup_loop() { rm -rf "$mnt"; } + trap cleanup_loop EXIT + bsdtar -xf "$iso" -C "$mnt" arch/boot/x86_64/vmlinuz-linux-cachyos arch/boot/x86_64/initramfs-linux-cachyos.img boot EFI 2>/dev/null || true + [[ -f "$mnt/arch/boot/x86_64/vmlinuz-linux-cachyos" ]] || { echo "bsdtar found no kernel in the ISO." >&2; exit 1; } +elif ! command -v udisksctl >/dev/null && [[ $EUID -eq 0 ]]; then # No udisks (the WSL box, as root): a plain loop device and mount. loop="$(losetup -f -r -P --show "$iso")" mnt="$(mktemp -d)" diff --git a/scripts/vmsuite.sh b/scripts/vmsuite.sh index 61f67d5..94fc0a4 100755 --- a/scripts/vmsuite.sh +++ b/scripts/vmsuite.sh @@ -96,7 +96,11 @@ for block in "$dir"/*.sh; do done vm_stop } 2>&1 | tee "$log" | sed -u "s/^/[$suite] /" >> "$TEST_LOG" +rc=${PIPESTATUS[0]} # an abort inside the braces must not pass as 0 failed checks fails="$(grep -c '^FAIL' "$log")" +if [[ $rc -ne 0 && $fails -eq 0 ]]; then + echo "FAIL $suite aborted (exit $rc): $(grep -v '^$' "$log" | tail -n 1)" | tee -a "$log"; fails=1 +fi echo "== $suite: $(grep -c '^PASS' "$log") passed, $fails failed, $(grep -c '^SKIP' "$log") skipped (log: $log)" | tee -a "$log" grep '^FAIL' "$log" exit "$fails"