merge_js_results.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python
  2. # Copyright 2022 The Chromium Authors. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. """Merge javascript results from code-coverage/pgo swarming runs.
  6. Called by merge_results.py
  7. """
  8. import argparse
  9. import json
  10. import logging
  11. import os
  12. import subprocess
  13. import sys
  14. import merge_lib as profile_merger
  15. import merge_js_lib as javascript_merger
  16. def _MergeAPIArgumentParser(*args, **kwargs):
  17. parser = argparse.ArgumentParser(*args, **kwargs)
  18. parser.add_argument('--task-output-dir', help=argparse.SUPPRESS)
  19. parser.add_argument(
  20. '--javascript-coverage-dir',
  21. help='directory for JavaScript coverage data')
  22. parser.add_argument(
  23. '--merged-js-cov-filename', help='filename to uniquely identify merged '
  24. 'json coverage data')
  25. return parser
  26. def main():
  27. parser = _MergeAPIArgumentParser()
  28. params = parser.parse_args()
  29. if not params.merged_js_cov_filename:
  30. parser.error('--merged-js-cov-filename required when merging '
  31. 'JavaScript coverage')
  32. parsed_scripts = javascript_merger.write_parsed_scripts(
  33. params.task_output_dir)
  34. if parsed_scripts:
  35. logging.info('Raw parsed scripts written out to %s', parsed_scripts)
  36. coverage_dirs = javascript_merger.get_raw_coverage_dirs(
  37. params.task_output_dir)
  38. logging.info(
  39. 'Identified directories containing coverage %s', coverage_dirs)
  40. try:
  41. logging.info('Converting raw coverage to istanbul')
  42. javascript_merger.convert_raw_coverage_to_istanbul(
  43. coverage_dirs, parsed_scripts, params.task_output_dir)
  44. istanbul_coverage_dir = os.path.join(params.task_output_dir, 'istanbul')
  45. output_dir = os.path.join(istanbul_coverage_dir, 'merged')
  46. os.makedirs(output_dir)
  47. coverage_file_path = os.path.join(output_dir, 'coverage.json')
  48. logging.info('Merging istanbul reports to %s', coverage_file_path)
  49. javascript_merger.merge_istanbul_reports(
  50. istanbul_coverage_dir, parsed_scripts, coverage_file_path)
  51. except RuntimeError as e:
  52. logging.warn('Failed executing istanbul tasks: %s', e)
  53. # Ensure JavaScript coverage dir exists.
  54. if not os.path.exists(params.javascript_coverage_dir):
  55. os.makedirs(params.javascript_coverage_dir)
  56. output_path = os.path.join(params.javascript_coverage_dir,
  57. '%s_javascript.json' % params.merged_js_cov_filename)
  58. logging.info('Merging v8 coverage output to %s', output_path)
  59. javascript_merger.merge_coverage_files(params.task_output_dir, output_path)
  60. if __name__ == '__main__':
  61. logging.basicConfig(
  62. format='[%(asctime)s %(levelname)s] %(message)s', level=logging.INFO)
  63. sys.exit(main())