fail_on_error.py 1.1 KB

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