blob: 9967ed6905ac3cbabc964ed0d4f877aefba4ebc9 [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
8source $CI_ROOT/utils.sh
9REPORT_JSON=$1
10REPORT_HTML=$2
11TEST_DEF_FOLDER="${WORKSPACE}/test-definitions"
12INFO_PATH='artifact/html/lcov_report/coverage.info'
13JSON_PATH='artifact/html/output_file.json'
14BRANCH_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
43 base_url = "{}job/{}/{}/artifact/html".format(
44 server, data['job'], build_number)
45 _files.append( {'id': build_number,
46 'config': {
47 'type': 'http',
48 'origin': "{}/output_file.json".format(
49 base_url)
50 },
51 'info': {
52 'type': 'http',
53 'origin': "{}/lcov_report/coverage.info".format(
54 base_url)
55 }
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"
136echo "Merging $merge_files coverage files..."
137source "$CI_ROOT/script/test_definitions.sh"
138mkdir -p $OUTDIR
139pushd $OUTDIR
140 merge_files=$(create_merge_cfg)
141 # 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
149 bash $TEST_DEF_FOLDER/scripts/tools/code_coverage/fastmodel_baremetal/bmcov/report/branch_coverage/merge.sh \
150 -j $MERGE_JSON -l ${OUTDIR} -p $project
151 generate_bmcov_header ${OUTDIR}/index.html ${REPORT_HTML}
152 cp ${REPORT_HTML} $OUTDIR
153popd