1#!/usr/bin/env python3
2
3import json
4import sys
5
6# Return whether SARIF file contains error-level results
7def codeql_sarif_contain_error(filename):
8    with open(filename, 'r') as f:
9        s = json.load(f)
10
11    for run in s.get('runs', []):
12        rules_metadata = run['tool']['driver']['rules']
13        if not rules_metadata:
14            rules_metadata = run['tool']['extensions'][0]['rules']
15
16        for res in run.get('results', []):
17            if 'ruleIndex' in res:
18                rule_index = res['ruleIndex']
19            elif 'rule' in res and 'index' in res['rule']:
20                rule_index = res['rule']['index']
21            else:
22                continue
23            try:
24                rule_level = rules_metadata[rule_index]['defaultConfiguration']['level']
25            except IndexError as e:
26                print(e, rule_index, len(rules_metadata))
27            else:
28                if rule_level == 'error':
29                    return True
30    return False
31
32if __name__ == "__main__":
33    if codeql_sarif_contain_error(sys.argv[1]):
34        sys.exit(1)
35