blob: e8d48e7319521a791f2a1f2df32cfc5a8d38b0bb [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2022 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Merge javascript results from code-coverage/pgo swarming runs.
Called by merge_results.py
"""
import argparse
import json
import logging
import os
import subprocess
import sys
import merge_lib as profile_merger
import merge_js_lib as javascript_merger
def _MergeAPIArgumentParser(*args, **kwargs):
parser = argparse.ArgumentParser(*args, **kwargs)
parser.add_argument('--task-output-dir', help=argparse.SUPPRESS)
parser.add_argument(
'--javascript-coverage-dir',
help='directory for JavaScript coverage data')
parser.add_argument(
'--merged-js-cov-filename', help='filename to uniquely identify merged '
'json coverage data')
return parser
def main():
parser = _MergeAPIArgumentParser()
params = parser.parse_args()
if not params.merged_js_cov_filename:
parser.error('--merged-js-cov-filename required when merging '
'JavaScript coverage')
parsed_scripts = javascript_merger.write_parsed_scripts(
params.task_output_dir)
if parsed_scripts:
logging.info('Raw parsed scripts written out to %s', parsed_scripts)
coverage_dirs = javascript_merger.get_raw_coverage_dirs(
params.task_output_dir)
logging.info(
'Identified directories containing coverage %s', coverage_dirs)
try:
logging.info('Converting raw coverage to istanbul')
javascript_merger.convert_raw_coverage_to_istanbul(
coverage_dirs, parsed_scripts, params.task_output_dir)
istanbul_coverage_dir = os.path.join(params.task_output_dir, 'istanbul')
output_dir = os.path.join(istanbul_coverage_dir, 'merged')
os.makedirs(output_dir)
coverage_file_path = os.path.join(output_dir, 'coverage.json')
logging.info('Merging istanbul reports to %s', coverage_file_path)
javascript_merger.merge_istanbul_reports(
istanbul_coverage_dir, parsed_scripts, coverage_file_path)
except RuntimeError as e:
logging.warn('Failed executing istanbul tasks: %s', e)
# Ensure JavaScript coverage dir exists.
if not os.path.exists(params.javascript_coverage_dir):
os.makedirs(params.javascript_coverage_dir)
output_path = os.path.join(params.javascript_coverage_dir,
'%s_javascript.json' % params.merged_js_cov_filename)
logging.info('Merging v8 coverage output to %s', output_path)
javascript_merger.merge_coverage_files(params.task_output_dir, output_path)
if __name__ == '__main__':
logging.basicConfig(
format='[%(asctime)s %(levelname)s] %(message)s', level=logging.INFO)
sys.exit(main())