1111
1212
1313def gen_rule_file (
14- design_dir ,
14+ rules_file ,
15+ new_rules_file ,
1516 update ,
1617 tighten ,
1718 failing ,
1819 variant ,
19- metrics = None ,
20+ metrics_file = None ,
2021 metrics_to_consider = [],
2122):
2223
23- golden_metrics = f"metadata-{ variant } -ok.json"
24- if isinstance (metrics , str ) and isfile (metrics ):
25- with open (metrics , "r" ) as f :
26- metrics = json .load (f )
27- elif isfile (golden_metrics ):
28- with open (golden_metrics , "r" ) as f :
29- metrics = json .load (f )
24+ with open (metrics_file , "r" ) as f :
25+ metrics = json .load (f )
3026 if not isinstance (metrics , dict ):
31- print (f"[ERROR] Invalid format for reference metrics { design_dir } " )
27+ print (f"[ERROR] Invalid format for reference metrics { metrics_file } " )
3228 sys .exit (1 )
3329
34- original_directory = getcwd ()
35- chdir (design_dir )
36- rules_file = f"rules-{ variant } .json"
3730 rules = dict ()
38-
3931 if isfile (rules_file ):
4032 with open (rules_file , "r" ) as f :
4133 OLD_RULES = json .load (f )
4234 else :
43- print (f"[WARNING] Rules file not found { design_dir } " )
35+ print (f"[WARNING] No old rules file found { rules_file } " )
4436 OLD_RULES = None
4537
4638 # dict format
@@ -189,10 +181,7 @@ def gen_rule_file(
189181 change_str = ""
190182 for field , option in rules_dict .items ():
191183 if field not in metrics .keys ():
192- print (
193- f"[ERROR] Metric { field } not found in "
194- f"metrics file: { metrics_file } or golden metrics."
195- )
184+ print (f"[ERROR] Metric { field } not found" )
196185 sys .exit (1 )
197186
198187 if isinstance (metrics [field ], str ):
@@ -305,16 +294,13 @@ def gen_rule_file(
305294 rules [field ] = dict (value = rule_value , compare = option ["compare" ])
306295
307296 if len (change_str ) > 0 :
308- print (design_dir )
309297 print (format_str .format ("Metric" , "Old" , "New" , "Type" ), end = "" )
310298 print (format_str .format ("------" , "---" , "---" , "----" ), end = "" )
311299 print (change_str )
312300
313- with open (rules_file , "w" ) as f :
301+ with open (new_rules_file , "w" ) as f :
314302 json .dump (rules , f , indent = 4 )
315303
316- chdir (original_directory )
317-
318304
319305def comma_separated_list (value ):
320306 if value is None or value == "all" :
@@ -326,7 +312,6 @@ def comma_separated_list(value):
326312 parser = argparse .ArgumentParser (
327313 description = "Generates or updates rules file for CI."
328314 )
329- parser .add_argument ("dir" , help = "Path to the design directory." )
330315 parser .add_argument (
331316 "-v" , "--variant" , default = "base" , help = 'Flow variant [default="base"].'
332317 )
@@ -358,6 +343,18 @@ def comma_separated_list(value):
358343 default = None ,
359344 help = "Reference metadata file." ,
360345 )
346+ parser .add_argument (
347+ "--rules" ,
348+ type = str ,
349+ default = None ,
350+ help = "Rules input file." ,
351+ )
352+ parser .add_argument (
353+ "--new-rules" ,
354+ type = str ,
355+ default = None ,
356+ help = "Rules input file." ,
357+ )
361358 parser .add_argument (
362359 "-m" ,
363360 "--metrics" ,
@@ -376,7 +373,8 @@ def comma_separated_list(value):
376373 sys .exit (1 )
377374
378375 gen_rule_file (
379- args .dir ,
376+ args .rules ,
377+ args .new_rules ,
380378 args .update ,
381379 args .tighten ,
382380 args .failing ,
0 commit comments