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