[dvsim/syn/lint] Add options to selectively sanitize reports
Signed-off-by: Michael Schaffner <msf@google.com>
diff --git a/util/dvsim/FlowCfg.py b/util/dvsim/FlowCfg.py
index 876a726..cf6c100 100644
--- a/util/dvsim/FlowCfg.py
+++ b/util/dvsim/FlowCfg.py
@@ -13,7 +13,7 @@
import hjson
from Deploy import Deploy
-from utils import VERBOSE, md_results_to_html, parse_hjson, print_msg_list, subst_wildcards
+from utils import VERBOSE, md_results_to_html, parse_hjson, subst_wildcards
# Interface class for extensions.
@@ -83,10 +83,16 @@
self.results_summary_server_html = ""
self.results_summary_server_page = ""
- # Full and summary results in md text.
+ # Full results in md text
self.results_md = ""
+ # Selectively sanitized md results to be mailed out or published
+ self.email_results_md = ""
+ self.publish_results_md = ""
+ self.sanitize_email_results = False
+ self.sanitize_publish_results = False
+ # Summary results, generated by over-arching cfg
+ self.email_summary_md = ""
self.results_summary_md = ""
- self.email_summary_md = "" # if user wanted to customize email content
def __post_init__(self):
# Run some post init checks
@@ -490,7 +496,7 @@
# otherwise default to send out results_summary_md
gen_results = self.email_summary_md or self.results_summary_md
else:
- gen_results = self.results_md
+ gen_results = self.email_results_md or self.results_md
results_html = md_results_to_html(self.results_title, self.css_file, gen_results)
results_html_file = self.scratch_root + "/email.html"
f = open(results_html_file, 'w')
@@ -613,14 +619,15 @@
rm_cmd = self.results_server_cmd + " -m rm -r " + rm_cmd + "; "
# Append the history to the results.
- results_md = self.results_md + history_txt
+ publish_results_md = self.publish_results_md or self.results_md
+ publish_results_md = publish_results_md + history_txt
# Publish the results page.
# First, write the results html file temporarily to the scratch area.
results_html_file = self.scratch_path + "/results_" + self.timestamp + ".html"
f = open(results_html_file, 'w')
f.write(
- md_results_to_html(self.results_title, self.css_file, results_md))
+ md_results_to_html(self.results_title, self.css_file, publish_results_md))
f.close()
rm_cmd += "/bin/rm -rf " + results_html_file + "; "
diff --git a/util/dvsim/LintCfg.py b/util/dvsim/LintCfg.py
index 6683c62..54d627e 100644
--- a/util/dvsim/LintCfg.py
+++ b/util/dvsim/LintCfg.py
@@ -14,6 +14,7 @@
from OneShotCfg import OneShotCfg
from utils import print_msg_list, subst_wildcards
+
class LintCfg(OneShotCfg):
"""Derivative class for linting purposes.
"""
@@ -192,9 +193,21 @@
if len(table) > 1:
self.results_md = results_str + tabulate(
table, headers="firstrow", tablefmt="pipe",
- colalign=colalign) + "\n" + fail_msgs
+ colalign=colalign) + "\n"
+
+ # the email and published reports will default to self.results_md if they are
+ # empty. in case they need to be sanitized, override them and do not append
+ # detailed messages.
+ if self.sanitize_email_results:
+ self.email_results_md = self.results_md
+ if self.sanitize_publish_results:
+ self.publish_results_md = self.results_md
+ # locally generated result always contains all details
+ self.results_md += fail_msgs
else:
self.results_md = results_str + "\nNo results to display.\n"
+ self.email_results_md = self.results_md
+ self.publish_results_md = self.results_md
# Write results to the scratch area
self.results_file = self.scratch_path + "/results_" + self.timestamp + ".md"
diff --git a/util/dvsim/SynCfg.py b/util/dvsim/SynCfg.py
index 1cddae3..4e329db 100644
--- a/util/dvsim/SynCfg.py
+++ b/util/dvsim/SynCfg.py
@@ -353,23 +353,33 @@
("Elab Errors", "elab_errors"),
("Compile Warnings", "compile_warnings"),
("Compile Errors", "compile_errors")]
-
+ fail_msgs = ""
has_msg = False
for _, key in hdr_key_pairs:
if key in self.result['messages']:
has_msg = True
break
- if has_msg and not self.args.publish:
- results_str += "\n### Errors and Warnings for Build Mode `'" + mode.name + "'`\n"
+ if has_msg:
+ fail_msgs += "\n### Errors and Warnings for Build Mode `'" + mode.name + "'`\n"
for hdr, key in hdr_key_pairs:
msgs = self.result['messages'].get(key)
- results_str += print_msg_list("#### " + hdr, msgs, self.max_msg_count)
+ fail_msgs += print_msg_list("#### " + hdr, msgs, self.max_msg_count)
+
+ # the email and published reports will default to self.results_md if they are
+ # empty. in case they need to be sanitized, override them and do not append
+ # detailed messages.
+ if self.sanitize_email_results:
+ self.email_results_md = results_str
+ if self.sanitize_publish_results:
+ self.publish_results_md = results_str
+
+ # locally generated result always contains all details
+ self.results_md = results_str + fail_msgs
# TODO: add support for pie / bar charts for area splits and
# QoR history
- self.results_md = results_str
# Write results to the scratch area
self.results_file = self.scratch_path + "/results_" + self.timestamp + ".md"
log.info("Detailed results are available at %s", self.results_file)