blob: cc53d3ec32ecc67b65c8e0ccd6c850b232b71dd4 [file] [log] [blame]
Leonardo Sandoval9dfdd1b2020-08-06 17:08:11 -05001#!/usr/bin/env bash
Zelalem1af7a7b2020-08-04 17:34:32 -05002#
3# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
4#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7
Zelalem1af7a7b2020-08-04 17:34:32 -05008REPORT_JSON=$1
9REPORT_HTML=$2
10TEST_DEF_FOLDER="${WORKSPACE}/test-definitions"
Paul Sokolovsky4673c442022-02-10 22:07:33 +010011INFO_PATH='artifact/html/lcov_report/coverage.info'
12JSON_PATH='artifact/html/output_file.json'
Zelalem1af7a7b2020-08-04 17:34:32 -050013BRANCH_FOLDER="scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report/branch_coverage"
14BMCOV_REPORT_FOLDER="$OUTDIR/$TEST_DEF_FOLDER/scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report"
15
16#################################################################
17# Create json file for input to the merge.sh for Code Coverage
18# Globals:
19# REPORT_JSON: Json file for SCP and TF ci gateway test results
20# MERGE_JSON: Json file to be used as input to the merge.sh
21# Arguments:
22# None
23# Outputs:
24# Print number of files to be merged
25################################################################
26create_merge_cfg() {
27python3 - << EOF
28import json
29import os
30
31server = os.getenv("JENKINS_URL", "https://jenkins.oss.arm.com/")
32merge_json = {} # json object
33_files = []
34with open("$REPORT_JSON") as json_file:
35 data = json.load(json_file)
36merge_number = 0
37test_results = data['test_results']
38test_files = data['test_files']
39for index, build_number in enumerate(test_results):
40 if "bmcov" in test_files[index] and test_results[build_number] == "SUCCESS":
41 merge_number += 1
Paul Sokolovsky4673c442022-02-10 22:07:33 +010042 base_url = "{}job/{}/{}/artifact/html".format(
Zelalem1af7a7b2020-08-04 17:34:32 -050043 server, data['job'], build_number)
44 _files.append( {'id': build_number,
45 'config': {
46 'type': 'http',
Paul Sokolovsky4673c442022-02-10 22:07:33 +010047 'origin': "{}/output_file.json".format(
Zelalem1af7a7b2020-08-04 17:34:32 -050048 base_url)
49 },
50 'info': {
51 'type': 'http',
Paul Sokolovsky4673c442022-02-10 22:07:33 +010052 'origin': "{}/lcov_report/coverage.info".format(
Zelalem1af7a7b2020-08-04 17:34:32 -050053 base_url)
54 }
55 })
56merge_json = { 'files' : _files }
57with open("$MERGE_JSON", 'w') as outfile:
58 json.dump(merge_json, outfile)
59print(merge_number)
60EOF
61}
62
63generate_bmcov_header() {
64 cov_html=$1
65 out_report=$2
66python3 - << EOF
67import re
68cov_html="$cov_html"
69out_report = "$out_report"
70with open(cov_html, "r") as f:
71 html_content = f.read()
72items = ["Lines", "Functions", "Branches"]
73s = """
74 <div id="div-cov">
75 <hr>
76 <table id="table-cov">
77 <tbody>
78 <tr>
79 <td>Type</td>
80 <td>Hit</td>
81 <td>Total</td>
82 <td>Coverage</td>
83 </tr>
84"""
85for item in items:
86 data = re.findall(r'<td class="headerItem">{}:</td>\n\s+<td class="headerCovTableEntry">(.+?)</td>\n\s+<td class="headerCovTableEntry">(.+?)</td>\n\s+'.format(item),
87 html_content, re.DOTALL)
88 if data is None:
89 continue
90 hit, total = data[0]
91 cov = round(float(hit)/float(total) * 100.0, 2)
92 color = "success"
93 if cov < 90:
94 color = "unstable"
95 if cov < 75:
96 color = "failure"
97 s = s + """
98 <tr>
99 <td>{}</td>
100 <td>{}</td>
101 <td>{}</td>
102 <td class='{}'>{} %</td>
103 </tr>
104""".format(item, hit, total, color, cov)
105s = s + """
106 </tbody>
107 </table>
108 <p>
109 <button onclick="window.open('artifact/$index/index.html','_blank');">Coverage Report</button>
110 </p>
111 </div>
112<script>
113 document.getElementById('tf-report-main').appendChild(document.getElementById("div-cov"));
114</script>
115"""
116with open(out_report, "a") as f:
117 f.write(s)
118EOF
119}
120OUTDIR=""
121index=""
122case "$TEST_GROUPS" in
123 scp*)
124 project="scp"
125 OUTDIR=${WORKSPACE}/reports
126 index=reports;;
127 tf*)
128 project="trusted_firmware"
129 OUTDIR=${WORKSPACE}/merge/outdir
130 index=merge/outdir;;
131 *)
132 exit 0;;
133esac
134export MERGE_JSON="$OUTDIR/merge.json"
Zelalem1af7a7b2020-08-04 17:34:32 -0500135source "$CI_ROOT/script/test_definitions.sh"
136mkdir -p $OUTDIR
137pushd $OUTDIR
138 merge_files=$(create_merge_cfg)
Paul Sokolovskyb759b762022-02-08 00:39:03 +0300139 echo "Merging $merge_files coverage files..."
Zelalem1af7a7b2020-08-04 17:34:32 -0500140 # Only merge when more than 1 test result
141 if [ "$merge_files" -lt 2 ] ; then
142 exit 0
143 fi
144 git clone $TEST_DEFINITIONS_REPO $TEST_DEF_FOLDER
145 pushd $TEST_DEF_FOLDER
146 git checkout $TEST_DEFINITIONS_REFSPEC
147 popd
Paul Sokolovsky227f2cc2021-12-21 10:58:26 +0300148
149 if echo "$JENKINS_URL" | grep -q "arm.com"; then
Zelalem1af7a7b2020-08-04 17:34:32 -0500150 bash $TEST_DEF_FOLDER/scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report/branch_coverage/merge.sh \
151 -j $MERGE_JSON -l ${OUTDIR} -p $project
Paul Sokolovsky227f2cc2021-12-21 10:58:26 +0300152 else
153 bash $TEST_DEF_FOLDER/coverage-tool/coverage-reporting/merge.sh \
154 -j $MERGE_JSON -l ${OUTDIR}
155 fi
156
Zelalem1af7a7b2020-08-04 17:34:32 -0500157 generate_bmcov_header ${OUTDIR}/index.html ${REPORT_HTML}
158 cp ${REPORT_HTML} $OUTDIR
159popd