import argparse import json import sys RAW_BADGE_SVG = ''' {} {} ''' parser = argparse.ArgumentParser(description='Use a summary.json file to generate a test coverage badge') parser.add_argument('-i', "--input_summary_file", type=argparse.FileType('r'), required = True, help='Summary file to use to generate the pass percentage badge') parser.add_argument('-o', "--output_badge_file", type=argparse.FileType('w'), required = True, help='Name of the badge to output') parser.add_argument('-s', "--badge_string", type=str, required = True, help='Name of the badge to output') try: results = parser.parse_args() except Exception as e: print(f"Error parsing arguments: {str(e)}") exit(1) try: summary_info = json.loads(results.input_summary_file.read()) except Exception as e: print(f"Error loading {results.input_summary_file.name} JSON file: {str(e)}") sys.exit(1) if 'summary' not in summary_info: print("Missing 'summary' key in {results.input_summary_file.name}") sys.exit(1) elif 'PASS_RATE' not in summary_info['summary'] or 'TESTS_PASSED' not in summary_info['summary']: print(f"Missing PASS_RATE in 'summary' section of {results.input_summary_file.name}") sys.exit(1) pass_percent = 100 * summary_info['summary']['PASS_RATE'] try: results.output_badge_file.write(RAW_BADGE_SVG.format(results.badge_string, "{:2.1f}%".format(pass_percent))) except Exception as e: print(f"Error generating badge: {str(e)}") sys.exit(1) print(f"Badge {results.output_badge_file.name} successfully generated!") sys.exit(0)