blob: 61cf5453dda74f4eff52f56a18f5f5befa39a4d3 [file] [log] [blame]
Christophe Lyonbff39612015-11-18 16:29:11 +01001#!/bin/bash
2
3mydir="`dirname $0`"
4status=0
5
6if [ $# != 2 ]
7then
8 echo "Usage: $0 ref_logs new_logs"
9 exit 1
10fi
11
12ref_logs=$1
13new_logs=$2
14
15tmptargets=/tmp/targets.$$
16trap "rm -f ${tmptargets}" 0 1 2 3 5 9 13 15
17
18rm -f ${tmptargets}
19
20function xml_report_print_row
21{
22 local target=${1?}
Christophe Lyon8fbc2a92015-12-02 17:46:22 +010023 local color=${2?}
24 local message=${3?}
Christophe Lyonbff39612015-11-18 16:29:11 +010025 local log_url=BUILD_URL/artifact/artifacts/logs/diff-${target}.txt
Christophe Lyonbff39612015-11-18 16:29:11 +010026 cat <<EOF
27<tr>
28 <td>${target}</td>
29 <td fontattribute="bold" bgcolor="${color}">${message}</td>
30 <td><![CDATA[<a href="$log_url">log for ${target}</a>]]></td>
31</tr>
32EOF
33}
34
35function html_report_print_row
36{
37 local target=${1?}
Christophe Lyon8fbc2a92015-12-02 17:46:22 +010038 local color=${2?}
39 local message=${3?}
Christophe Lyonbff39612015-11-18 16:29:11 +010040 local log_url=diff-${target}.txt
Christophe Lyonbff39612015-11-18 16:29:11 +010041 cat <<EOF
42 <tr>
43 <td>${target}</td>
44 <td style="background-color:$color"><a href="$log_url"><b>${message}</b></a></td>
45 </tr>
46EOF
47}
48
49function xml_report_print_header
50{
51 cat <<EOF
52<section name="Results comparison ${ref_logs} vs ${new_logs}"><table>
53 <tr>
54 <td fontattribute="bold" width="120" align="center">Target</td>
55 <td fontattribute="bold" width="120" align="center">Status</td>
56 <td fontattribute="bold" width="120" align="center">Log</td>
57</tr>
58EOF
59}
60
61function html_report_print_header
62{
63 cat <<EOF
64<h1>Results comparison ${ref_logs} vs ${new_logs}</h1>
65<table border="1">
66 <tr>
67 <td><b>Target</b></td>
68 <td><b>Status</b></td>
69 </tr>
70EOF
71}
72
73function xml_report_print_footer
74{
75 cat <<EOF
76</table></section>
77EOF
78}
79
80function html_report_print_footer
81{
82 cat <<EOF
83</table>
84EOF
85}
86
87function xml_log_print_field
88{
89 local target=${1?}
90 local log=${2?}
91 cat <<EOF
92 <field name="${target}">
93 <![CDATA[
94EOF
95cat $log
96cat <<EOF
97 ]]></field>
98EOF
99}
100
101function html_log_print_field
102{
103 local target=${1?}
104 local log=${2?}
105 cat <<EOF
106 <p>${target}</p>
107EOF
108cat $log
109cat <<EOF
110EOF
111}
112
113function xml_log_print_header
114{
115 cat <<EOF
116<section name="Logs">
117EOF
118}
119
120function html_log_print_header
121{
122 cat <<EOF
123<h1>Logs</h1>
124EOF
125}
126
127function xml_log_print_footer
128{
129 cat <<EOF
130</section>
131EOF
132}
133
134function html_log_print_footer
135{
136 cat <<EOF
137EOF
138}
139
140# For the time being, we expect different jobs to store their results
141# in similar directories.
142
143# Build list of all build-targets validated for ${ref_logs}
144for dir in `find ${ref_logs}/ -mindepth 1 -maxdepth 1 -type d`
145do
146 basename ${dir} >> ${tmptargets}
147done
148
149# Build list of all build-targets validated for ${new_logs}
150for dir in `find ${new_logs}/ -mindepth 1 -maxdepth 1 -type d`
151do
152 basename ${dir} >> ${tmptargets}
153done
154
155if [ -s ${tmptargets} ]; then
156 buildtargets=`sort -u ${tmptargets}`
157fi
158rm -f ${tmptargets}
159
160XML_REPORT=${mydir}/report0.xml
161HTML_REPORT=${mydir}/report0.html
162rm -f ${XML_REPORT} ${XML_REPORT}.part
163rm -f ${HTML_REPORT} ${HTML_REPORT}.part
164XML_LOG=${mydir}/report1.xml
165HTML_LOG=${mydir}/report1.html
166rm -f ${XML_LOG} ${XML_LOG}.part
167rm -f ${HTML_LOG} ${HTML_LOG}.part
168
169xml_report_print_header > ${XML_REPORT}.part
170html_report_print_header > ${HTML_REPORT}.part
171xml_log_print_header > ${XML_LOG}.part
172html_log_print_header > ${HTML_LOG}.part
173
174for buildtarget in ${buildtargets}
175do
176 ref="${ref_logs}/${buildtarget}"
177 build="${new_logs}/${buildtarget}"
178 echo "REF = "${ref}
179 echo "BUILD = "${build}
180 failed=false
Christophe Lyona8755e82015-11-20 00:40:34 +0100181 improved=false
Christophe Lyonbff39612015-11-18 16:29:11 +0100182 mylog=${mydir}/diff-${buildtarget}.txt
183 target=`echo ${buildtarget} | cut -d. -f2`
184 printf "\t# ============================================================== #\n" > ${mylog}
185 printf "\t#\t\t*** ${buildtarget} ***\n" >> ${mylog}
186 printf "\t# ============================================================== #\n\n" >> ${mylog}
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100187
188 color=lightgreen
189 message=PASSED
190
Christophe Lyonbff39612015-11-18 16:29:11 +0100191 [ -d "${build}" -a -d "${ref}" ] && ${mydir}/compare_tests -target ${target} \
Christophe Lyona8755e82015-11-20 00:40:34 +0100192 ${ref} ${build} >> ${mylog}
193 ret=$?
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100194 if [ ! -d "${ref}" ]; then
195 printf "\t# REF RESULTS NOT PRESENT: BUILD FAILED\n" >> ${mylog}
Christophe Lyonf02cb6b2016-01-12 14:32:24 +0100196 ret=5
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100197 fi
198 if [ ! -d "${build}" ]; then
199 printf "\t# BUILD RESULTS NOT PRESENT: BUILD FAILED\n" >> ${mylog}
Christophe Lyonf02cb6b2016-01-12 14:32:24 +0100200 ret=5
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100201 fi
Christophe Lyona8755e82015-11-20 00:40:34 +0100202 case $ret in
203 0) # No change
204 ;;
205 1) # Improvement
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100206 color=green
207 message=BETTER
Christophe Lyona8755e82015-11-20 00:40:34 +0100208 ;;
209 2) # Regression
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100210 color=red
211 message=FAILED
Christophe Lyonae7e47a2016-01-07 18:29:50 +0100212 failed=true
Christophe Lyona8755e82015-11-20 00:40:34 +0100213 ;;
Christophe Lyonf02cb6b2016-01-12 14:32:24 +0100214 3) # No common logs
215 color=red
216 message=NO-COMMON-LOGS
217 failed=true
218 ;;
219 4) # Extra logs
220 color=red
221 message=EXTRA-LOGS
222 failed=true
223 ;;
224 5) # Build failed
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100225 color=darkred
226 message=BUILDFAILED
Christophe Lyonae7e47a2016-01-07 18:29:50 +0100227 failed=true
Christophe Lyonf02cb6b2016-01-12 14:32:24 +0100228 ;;
Christophe Lyona8755e82015-11-20 00:40:34 +0100229 esac
Christophe Lyonbff39612015-11-18 16:29:11 +0100230
231 ${failed} && status=1
Christophe Lyon8fbc2a92015-12-02 17:46:22 +0100232 xml_report_print_row "${buildtarget}" "$color" "$message" >> $XML_REPORT.part
233 html_report_print_row "${buildtarget}" "$color" "$message" >> $HTML_REPORT.part
Christophe Lyonbff39612015-11-18 16:29:11 +0100234 xml_log_print_field "${buildtarget}" ${mylog} >> $XML_LOG.part
235 html_log_print_field "${buildtarget}" ${mylog} >> $HTML_LOG.part
236done
237
238xml_report_print_footer >> ${XML_REPORT}.part
239html_report_print_footer >> ${HTML_REPORT}.part
240xml_log_print_footer >> ${XML_LOG}.part
241html_log_print_footer >> ${HTML_LOG}.part
242mv ${XML_REPORT}.part ${XML_REPORT}
243mv ${HTML_REPORT}.part ${HTML_REPORT}
244mv ${XML_LOG}.part ${XML_LOG}
245mv ${HTML_LOG}.part ${HTML_LOG}
246
247exit ${status}