blob: fed92563e2e64863fa4342f9ed72c2e855bf3b99 [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 Sokolovsky301710a2022-02-21 14:56:33 +030011
Gary Morrison999a9d72022-03-14 18:29:06 -050012if echo "$JENKINS_URL" | grep -q "oss.arm.com"; then
Paul Sokolovskydd04dea2022-02-21 13:40:43 +030013ARTIFACT_PATH='artifact/html'
14INFO_PATH='lcov_report/coverage.info'
15JSON_PATH='output_file.json'
Paul Sokolovsky301710a2022-02-21 14:56:33 +030016else
17ARTIFACT_PATH='artifact'
18INFO_PATH='trace_report/coverage.info'
19JSON_PATH='config_file.json'
20fi
21
Zelalem1af7a7b2020-08-04 17:34:32 -050022BRANCH_FOLDER="scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report/branch_coverage"
23BMCOV_REPORT_FOLDER="$OUTDIR/$TEST_DEF_FOLDER/scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report"
24
25#################################################################
26# Create json file for input to the merge.sh for Code Coverage
27# Globals:
28# REPORT_JSON: Json file for SCP and TF ci gateway test results
29# MERGE_JSON: Json file to be used as input to the merge.sh
30# Arguments:
31# None
32# Outputs:
33# Print number of files to be merged
34################################################################
35create_merge_cfg() {
36python3 - << EOF
37import json
38import os
39
40server = os.getenv("JENKINS_URL", "https://jenkins.oss.arm.com/")
41merge_json = {} # json object
42_files = []
43with open("$REPORT_JSON") as json_file:
44 data = json.load(json_file)
45merge_number = 0
46test_results = data['test_results']
47test_files = data['test_files']
48for index, build_number in enumerate(test_results):
49 if "bmcov" in test_files[index] and test_results[build_number] == "SUCCESS":
50 merge_number += 1
Paul Sokolovskydd04dea2022-02-21 13:40:43 +030051 base_url = "{}job/{}/{}/{}".format(
52 server, data['job'], build_number, "$ARTIFACT_PATH")
Zelalem1af7a7b2020-08-04 17:34:32 -050053 _files.append( {'id': build_number,
54 'config': {
55 'type': 'http',
Paul Sokolovskydd04dea2022-02-21 13:40:43 +030056 'origin': "{}/{}".format(
57 base_url, "$JSON_PATH")
Zelalem1af7a7b2020-08-04 17:34:32 -050058 },
59 'info': {
60 'type': 'http',
Paul Sokolovskydd04dea2022-02-21 13:40:43 +030061 'origin': "{}/{}".format(
62 base_url, "$INFO_PATH")
Zelalem1af7a7b2020-08-04 17:34:32 -050063 }
64 })
65merge_json = { 'files' : _files }
66with open("$MERGE_JSON", 'w') as outfile:
67 json.dump(merge_json, outfile)
68print(merge_number)
69EOF
70}
71
72generate_bmcov_header() {
73 cov_html=$1
74 out_report=$2
75python3 - << EOF
76import re
77cov_html="$cov_html"
78out_report = "$out_report"
79with open(cov_html, "r") as f:
80 html_content = f.read()
81items = ["Lines", "Functions", "Branches"]
82s = """
83 <div id="div-cov">
84 <hr>
85 <table id="table-cov">
86 <tbody>
87 <tr>
88 <td>Type</td>
89 <td>Hit</td>
90 <td>Total</td>
91 <td>Coverage</td>
92 </tr>
93"""
94for item in items:
95 data = re.findall(r'<td class="headerItem">{}:</td>\n\s+<td class="headerCovTableEntry">(.+?)</td>\n\s+<td class="headerCovTableEntry">(.+?)</td>\n\s+'.format(item),
96 html_content, re.DOTALL)
97 if data is None:
98 continue
99 hit, total = data[0]
100 cov = round(float(hit)/float(total) * 100.0, 2)
101 color = "success"
102 if cov < 90:
103 color = "unstable"
104 if cov < 75:
105 color = "failure"
106 s = s + """
107 <tr>
108 <td>{}</td>
109 <td>{}</td>
110 <td>{}</td>
111 <td class='{}'>{} %</td>
112 </tr>
113""".format(item, hit, total, color, cov)
114s = s + """
115 </tbody>
116 </table>
117 <p>
118 <button onclick="window.open('artifact/$index/index.html','_blank');">Coverage Report</button>
119 </p>
120 </div>
121<script>
122 document.getElementById('tf-report-main').appendChild(document.getElementById("div-cov"));
123</script>
124"""
125with open(out_report, "a") as f:
126 f.write(s)
127EOF
128}
129OUTDIR=""
130index=""
131case "$TEST_GROUPS" in
132 scp*)
133 project="scp"
134 OUTDIR=${WORKSPACE}/reports
135 index=reports;;
136 tf*)
137 project="trusted_firmware"
138 OUTDIR=${WORKSPACE}/merge/outdir
139 index=merge/outdir;;
140 *)
141 exit 0;;
142esac
143export MERGE_JSON="$OUTDIR/merge.json"
Zelalem1af7a7b2020-08-04 17:34:32 -0500144source "$CI_ROOT/script/test_definitions.sh"
145mkdir -p $OUTDIR
146pushd $OUTDIR
147 merge_files=$(create_merge_cfg)
Paul Sokolovskyb759b762022-02-08 00:39:03 +0300148 echo "Merging $merge_files coverage files..."
Zelalem1af7a7b2020-08-04 17:34:32 -0500149 # Only merge when more than 1 test result
150 if [ "$merge_files" -lt 2 ] ; then
151 exit 0
152 fi
153 git clone $TEST_DEFINITIONS_REPO $TEST_DEF_FOLDER
154 pushd $TEST_DEF_FOLDER
155 git checkout $TEST_DEFINITIONS_REFSPEC
156 popd
Paul Sokolovsky227f2cc2021-12-21 10:58:26 +0300157
Gary Morrison999a9d72022-03-14 18:29:06 -0500158 if echo "$JENKINS_URL" | grep -q "oss.arm.com"; then
Zelalem1af7a7b2020-08-04 17:34:32 -0500159 bash $TEST_DEF_FOLDER/scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report/branch_coverage/merge.sh \
160 -j $MERGE_JSON -l ${OUTDIR} -p $project
Paul Sokolovsky227f2cc2021-12-21 10:58:26 +0300161 else
162 bash $TEST_DEF_FOLDER/coverage-tool/coverage-reporting/merge.sh \
Paul Sokolovsky49a1a5a2022-06-09 22:56:43 +0300163 -j $MERGE_JSON -l ${OUTDIR} -w $SHARE_FOLDER
Paul Sokolovsky227f2cc2021-12-21 10:58:26 +0300164 fi
165
Zelalem1af7a7b2020-08-04 17:34:32 -0500166 generate_bmcov_header ${OUTDIR}/index.html ${REPORT_HTML}
167 cp ${REPORT_HTML} $OUTDIR
168popd