xref: /freebsd-src/sys/contrib/openzfs/.github/workflows/scripts/qemu-7-prepare.sh (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1*7a7741afSMartin Matuska#!/usr/bin/env bash
2*7a7741afSMartin Matuska
3*7a7741afSMartin Matuska######################################################################
4*7a7741afSMartin Matuska# 7) prepare output of the results
5*7a7741afSMartin Matuska# - this script pre-creates all needed logfiles for later summary
6*7a7741afSMartin Matuska######################################################################
7*7a7741afSMartin Matuska
8*7a7741afSMartin Matuskaset -eu
9*7a7741afSMartin Matuska
10*7a7741afSMartin Matuska# read our defined variables
11*7a7741afSMartin Matuskacd /var/tmp
12*7a7741afSMartin Matuskasource env.txt
13*7a7741afSMartin Matuska
14*7a7741afSMartin Matuskamkdir -p $RESPATH
15*7a7741afSMartin Matuska
16*7a7741afSMartin Matuska# check if building the module has failed
17*7a7741afSMartin Matuskaif [ -z ${VMs:-} ]; then
18*7a7741afSMartin Matuska  cd $RESPATH
19*7a7741afSMartin Matuska  echo ":exclamation: ZFS module didn't build successfully :exclamation:" \
20*7a7741afSMartin Matuska    | tee summary.txt | tee /tmp/summary.txt
21*7a7741afSMartin Matuska  cp /var/tmp/*.txt .
22*7a7741afSMartin Matuska  tar cf /tmp/qemu-$OS.tar -C $RESPATH -h . || true
23*7a7741afSMartin Matuska  exit 0
24*7a7741afSMartin Matuskafi
25*7a7741afSMartin Matuska
26*7a7741afSMartin Matuska# build was okay
27*7a7741afSMartin MatuskaBASE="$HOME/work/zfs/zfs"
28*7a7741afSMartin MatuskaMERGE="$BASE/.github/workflows/scripts/merge_summary.awk"
29*7a7741afSMartin Matuska
30*7a7741afSMartin Matuska# catch result files of testings (vm's should be there)
31*7a7741afSMartin Matuskafor i in $(seq 1 $VMs); do
32*7a7741afSMartin Matuska  rsync -arL zfs@192.168.122.1$i:$RESPATH/current $RESPATH/vm$i || true
33*7a7741afSMartin Matuska  scp zfs@192.168.122.1$i:"/var/tmp/*.txt" $RESPATH/vm$i || true
34*7a7741afSMartin Matuskadone
35*7a7741afSMartin Matuskacp -f /var/tmp/*.txt $RESPATH || true
36*7a7741afSMartin Matuskacd $RESPATH
37*7a7741afSMartin Matuska
38*7a7741afSMartin Matuska# prepare result files for summary
39*7a7741afSMartin Matuskafor i in $(seq 1 $VMs); do
40*7a7741afSMartin Matuska  file="vm$i/build-stderr.txt"
41*7a7741afSMartin Matuska  test -s $file && mv -f $file build-stderr.txt
42*7a7741afSMartin Matuska
43*7a7741afSMartin Matuska  file="vm$i/build-exitcode.txt"
44*7a7741afSMartin Matuska  test -s $file && mv -f $file build-exitcode.txt
45*7a7741afSMartin Matuska
46*7a7741afSMartin Matuska  file="vm$i/uname.txt"
47*7a7741afSMartin Matuska  test -s $file && mv -f $file uname.txt
48*7a7741afSMartin Matuska
49*7a7741afSMartin Matuska  file="vm$i/tests-exitcode.txt"
50*7a7741afSMartin Matuska  if [ ! -s $file ]; then
51*7a7741afSMartin Matuska    # XXX - add some tests for kernel panic's here
52*7a7741afSMartin Matuska    # tail -n 80 vm$i/console.txt | grep XYZ
53*7a7741afSMartin Matuska    echo 1 > $file
54*7a7741afSMartin Matuska  fi
55*7a7741afSMartin Matuska  rv=$(cat vm$i/tests-exitcode.txt)
56*7a7741afSMartin Matuska  test $rv != 0 && touch /tmp/have_failed_tests
57*7a7741afSMartin Matuska
58*7a7741afSMartin Matuska  file="vm$i/current/log"
59*7a7741afSMartin Matuska  if [ -s $file ]; then
60*7a7741afSMartin Matuska    cat $file >> log
61*7a7741afSMartin Matuska    awk '/\[FAIL\]|\[KILLED\]/{ show=1; print; next; }; \
62*7a7741afSMartin Matuska      /\[SKIP\]|\[PASS\]/{ show=0; } show' \
63*7a7741afSMartin Matuska      $file > /tmp/vm${i}dbg.txt
64*7a7741afSMartin Matuska  fi
65*7a7741afSMartin Matuska
66*7a7741afSMartin Matuska  file="vm${i}log.txt"
67*7a7741afSMartin Matuska  fileC="/tmp/vm${i}log.txt"
68*7a7741afSMartin Matuska  if [ -s $file ]; then
69*7a7741afSMartin Matuska    cat $file >> summary
70*7a7741afSMartin Matuska    cat $file | $BASE/scripts/zfs-tests-color.sh > $fileC
71*7a7741afSMartin Matuska  fi
72*7a7741afSMartin Matuskadone
73*7a7741afSMartin Matuska
74*7a7741afSMartin Matuska# create summary of tests
75*7a7741afSMartin Matuskaif [ -s summary ]; then
76*7a7741afSMartin Matuska  $MERGE summary | grep -v '^/' > summary.txt
77*7a7741afSMartin Matuska  $MERGE summary | $BASE/scripts/zfs-tests-color.sh > /tmp/summary.txt
78*7a7741afSMartin Matuska  rm -f summary
79*7a7741afSMartin Matuskaelse
80*7a7741afSMartin Matuska  touch summary.txt /tmp/summary.txt
81*7a7741afSMartin Matuskafi
82*7a7741afSMartin Matuska
83*7a7741afSMartin Matuska# create file for debugging
84*7a7741afSMartin Matuskaif [ -s log ]; then
85*7a7741afSMartin Matuska  awk '/\[FAIL\]|\[KILLED\]/{ show=1; print; next; }; \
86*7a7741afSMartin Matuska    /\[SKIP\]|\[PASS\]/{ show=0; } show' \
87*7a7741afSMartin Matuska    log > summary-failure-logs.txt
88*7a7741afSMartin Matuska  rm -f log
89*7a7741afSMartin Matuskaelse
90*7a7741afSMartin Matuska  touch summary-failure-logs.txt
91*7a7741afSMartin Matuskafi
92*7a7741afSMartin Matuska
93*7a7741afSMartin Matuska# create debug overview for failed tests
94*7a7741afSMartin Matuskacat summary.txt \
95*7a7741afSMartin Matuska  | awk '/\(expected PASS\)/{ if ($1!="SKIP") print $2; next; } show' \
96*7a7741afSMartin Matuska  | while read t; do
97*7a7741afSMartin Matuska  cat summary-failure-logs.txt \
98*7a7741afSMartin Matuska    | awk '$0~/Test[: ]/{ show=0; } $0~v{ show=1; } show' v="$t" \
99*7a7741afSMartin Matuska    > /tmp/fail.txt
100*7a7741afSMartin Matuska  SIZE=$(stat --printf="%s" /tmp/fail.txt)
101*7a7741afSMartin Matuska  SIZE=$((SIZE/1024))
102*7a7741afSMartin Matuska  # Test Summary:
103*7a7741afSMartin Matuska  echo "##[group]$t ($SIZE KiB)" >> /tmp/failed.txt
104*7a7741afSMartin Matuska  cat /tmp/fail.txt | $BASE/scripts/zfs-tests-color.sh >> /tmp/failed.txt
105*7a7741afSMartin Matuska  echo "##[endgroup]" >> /tmp/failed.txt
106*7a7741afSMartin Matuska  # Job Summary:
107*7a7741afSMartin Matuska  echo -e "\n<details>\n<summary>$t ($SIZE KiB)</summary><pre>" >> failed.txt
108*7a7741afSMartin Matuska  cat /tmp/fail.txt >> failed.txt
109*7a7741afSMartin Matuska  echo "</pre></details>" >> failed.txt
110*7a7741afSMartin Matuskadone
111*7a7741afSMartin Matuska
112*7a7741afSMartin Matuskaif [ -e /tmp/have_failed_tests ]; then
113*7a7741afSMartin Matuska  echo ":warning: Some tests failed!" >> failed.txt
114*7a7741afSMartin Matuskaelse
115*7a7741afSMartin Matuska  echo ":thumbsup: All tests passed." >> failed.txt
116*7a7741afSMartin Matuskafi
117*7a7741afSMartin Matuska
118*7a7741afSMartin Matuskaif [ ! -s uname.txt ]; then
119*7a7741afSMartin Matuska  echo ":interrobang: Panic - where is my uname.txt?" > uname.txt
120*7a7741afSMartin Matuskafi
121*7a7741afSMartin Matuska
122*7a7741afSMartin Matuska# artifact ready now
123*7a7741afSMartin Matuskatar cf /tmp/qemu-$OS.tar -C $RESPATH -h . || true
124