mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 10:54:35 +03:00
19354abc53
- We've seen occasional 'ERROR 502: Bad Gateway' from the runner trying to download an image with axel. Axel can open multiple connections for a faster download, so maybe that's causing problems. This commit adds in a fallback to curl if the axel download doesn't work. - Update merge_summary.awk to print out killed tests in the summary. We've seen cases where the summary page was red but there were no test failures printed. This is because one of the VMs had too may killed tests, which caused the total test time to run too long and caused the runner to timeout qemu-6-test.sh. When the runner kills off qemu-6-tests.sh, it means we never generate the nice summary page for that VM listing the killed off tests. This commit parses the partial test logs for killed off tests and includes them in the merge_summary.awk output. - Print an error message in the summary page if one of the VMs didn't complete ZTS. This helps draw attention to a VM crash. - FreeBSD sometimes has broken links to their CI image. When that happens, select the newest nightly snapshot image as an alternative. This is needed right now, since the current images in the FreeBSD 16 "current/" directory are returning 404 errors. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #18460
158 lines
4.3 KiB
Bash
Executable File
158 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
######################################################################
|
|
# 7) prepare output of the results
|
|
# - this script pre-creates all needed logfiles for later summary
|
|
######################################################################
|
|
|
|
set -eu
|
|
|
|
# read our defined variables
|
|
cd /var/tmp
|
|
source env.txt
|
|
|
|
mkdir -p $RESPATH
|
|
|
|
TARNAME=qemu-$OS
|
|
|
|
# check if building the module has failed
|
|
if [ -z ${VMs:-} ]; then
|
|
cd $RESPATH
|
|
echo ":exclamation: ZFS module didn't build successfully :exclamation:" \
|
|
| tee summary.txt | tee /tmp/summary.txt
|
|
cp /var/tmp/*.txt .
|
|
|
|
# rename /var/tmp/test_results to /var/tmp/qemu-$OS
|
|
mv $RESPATH $(dirname $RESPATH)/$TARNAME
|
|
tar cjf /tmp/$TARNAME.tar.bz2 -C $(dirname $RESPATH) -h $TARNAME || true
|
|
# move it back to /var/tmp/test_results (needed for next script)
|
|
mv $(dirname $RESPATH)/$TARNAME $RESPATH
|
|
|
|
exit 0
|
|
fi
|
|
|
|
if ! grep -q vm /etc/hosts ; then
|
|
echo "No vm* hostnames, VMs probably didn't startup"
|
|
exit 0
|
|
fi
|
|
|
|
# build was okay
|
|
BASE="$HOME/work/zfs/zfs"
|
|
MERGE="$BASE/.github/workflows/scripts/merge_summary.awk"
|
|
|
|
# catch result files of testings (vm's should be there)
|
|
for ((i=1; i<=VMs; i++)); do
|
|
rsync -arL zfs@vm$i:$RESPATH/current $RESPATH/vm$i || true
|
|
scp zfs@vm$i:"/var/tmp/*.txt" $RESPATH/vm$i || true
|
|
scp zfs@vm$i:"/var/tmp/*.rpm" $RESPATH/vm$i || true
|
|
done
|
|
cp -f /var/tmp/*.txt $RESPATH || true
|
|
cd $RESPATH
|
|
|
|
# prepare result files for summary
|
|
for ((i=1; i<=VMs; i++)); do
|
|
|
|
# no results, VM either didn't start or was unreachable, create
|
|
# the missing directory which is expected by subsequent steps
|
|
test -d vm$i || mkdir -p vm$i
|
|
|
|
file="vm$i/build-stderr.txt"
|
|
test -s $file && mv -f $file build-stderr.txt
|
|
|
|
file="vm$i/build-exitcode.txt"
|
|
test -s $file && mv -f $file build-exitcode.txt
|
|
|
|
file="vm$i/uname.txt"
|
|
test -s $file && mv -f $file uname.txt
|
|
|
|
file="vm$i/tests-exitcode.txt"
|
|
if [ ! -s "$file" ]; then
|
|
# Print in bold red
|
|
echo -e "\033[1;31mVM$i didn't finish ZTS and may have crashed!\033[0m" >> extra
|
|
|
|
# ENOENT=2
|
|
echo 2 > "$file"
|
|
fi
|
|
rv=$(cat "$file")
|
|
test $rv != 0 && touch /tmp/have_failed_tests
|
|
|
|
file="vm$i/current/log"
|
|
if [ -s $file ]; then
|
|
cat $file >> log
|
|
awk '/\[FAIL\]|\[KILLED\]/{ show=1; print; next; }; \
|
|
/\[SKIP\]|\[PASS\]/{ show=0; } show' \
|
|
$file > /tmp/vm${i}dbg.txt
|
|
fi
|
|
|
|
file="vm${i}log.txt"
|
|
fileC="/tmp/vm${i}log.txt"
|
|
if [ -s $file ]; then
|
|
cat $file >> summary
|
|
cat $file | $BASE/scripts/zfs-tests-color.sh > $fileC
|
|
fi
|
|
done
|
|
|
|
# create summary of tests
|
|
if [ -s summary ]; then
|
|
$MERGE summary | grep -v '^/' > summary.txt
|
|
$MERGE summary | $BASE/scripts/zfs-tests-color.sh > /tmp/summary.txt
|
|
|
|
# Add in additional 'extra' text at the end, if file is present.
|
|
if [ -s extra ] ; then
|
|
echo "" >> /tmp/summary.txt
|
|
cat extra >> /tmp/summary.txt
|
|
rm -f extra
|
|
fi
|
|
|
|
rm -f summary
|
|
else
|
|
touch summary.txt /tmp/summary.txt
|
|
fi
|
|
|
|
# create file for debugging
|
|
if [ -s log ]; then
|
|
awk '/\[FAIL\]|\[KILLED\]/{ show=1; print; next; }; \
|
|
/\[SKIP\]|\[PASS\]/{ show=0; } show' \
|
|
log > summary-failure-logs.txt
|
|
rm -f log
|
|
else
|
|
touch summary-failure-logs.txt
|
|
fi
|
|
|
|
# create debug overview for failed tests
|
|
cat summary.txt \
|
|
| awk '/\(expected PASS\)/{ if ($1!="SKIP") print $2; next; } show' \
|
|
| while read t; do
|
|
cat summary-failure-logs.txt \
|
|
| awk '$0~/Test[: ]/{ show=0; } $0~v{ show=1; } show' v="$t" \
|
|
> /tmp/fail.txt
|
|
SIZE=$(stat --printf="%s" /tmp/fail.txt)
|
|
SIZE=$((SIZE/1024))
|
|
# Test Summary:
|
|
echo "##[group]$t ($SIZE KiB)" >> /tmp/failed.txt
|
|
cat /tmp/fail.txt | $BASE/scripts/zfs-tests-color.sh >> /tmp/failed.txt
|
|
echo "##[endgroup]" >> /tmp/failed.txt
|
|
# Job Summary:
|
|
echo -e "\n<details>\n<summary>$t ($SIZE KiB)</summary><pre>" >> failed.txt
|
|
cat /tmp/fail.txt >> failed.txt
|
|
echo "</pre></details>" >> failed.txt
|
|
done
|
|
|
|
if [ -e /tmp/have_failed_tests ]; then
|
|
echo ":warning: Some tests failed!" >> failed.txt
|
|
else
|
|
echo ":thumbsup: All tests passed." >> failed.txt
|
|
fi
|
|
|
|
if [ ! -s uname.txt ]; then
|
|
echo ":interrobang: Panic - where is my uname.txt?" > uname.txt
|
|
fi
|
|
|
|
# artifact ready now
|
|
#
|
|
# rename /var/tmp/test_results to /var/tmp/qemu-$OS
|
|
mv $RESPATH $(dirname $RESPATH)/$TARNAME
|
|
tar cjf /tmp/$TARNAME.tar.bz2 -C $(dirname $RESPATH) -h $TARNAME || true
|
|
# move it back to /var/tmp/test_results (needed for next script)
|
|
mv $(dirname $RESPATH)/$TARNAME $RESPATH
|