|
@@ -0,0 +1,34 @@
|
|
|
|
+#!/usr/bin/env python3
|
|
|
|
+
|
|
|
|
+import json
|
|
|
|
+import sys
|
|
|
|
+
|
|
|
|
+# Return whether SARIF file contains error-level results
|
|
|
|
+def codeql_sarif_contain_error(filename):
|
|
|
|
+ with open(filename, 'r') as f:
|
|
|
|
+ s = json.load(f)
|
|
|
|
+
|
|
|
|
+ for run in s.get('runs', []):
|
|
|
|
+ rules_metadata = run['tool']['driver']['rules']
|
|
|
|
+ if not rules_metadata:
|
|
|
|
+ rules_metadata = run['tool']['extensions'][0]['rules']
|
|
|
|
+
|
|
|
|
+ for res in run.get('results', []):
|
|
|
|
+ if 'ruleIndex' in res:
|
|
|
|
+ rule_index = res['ruleIndex']
|
|
|
|
+ elif 'rule' in res and 'index' in res['rule']:
|
|
|
|
+ rule_index = res['rule']['index']
|
|
|
|
+ else:
|
|
|
|
+ continue
|
|
|
|
+ try:
|
|
|
|
+ rule_level = rules_metadata[rule_index]['defaultConfiguration']['level']
|
|
|
|
+ except IndexError as e:
|
|
|
|
+ print(e, rule_index, len(rules_metadata))
|
|
|
|
+ else:
|
|
|
|
+ if rule_level == 'error':
|
|
|
|
+ return True
|
|
|
|
+ return False
|
|
|
|
+
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
+ if codeql_sarif_contain_error(sys.argv[1]):
|
|
|
|
+ sys.exit(1)
|