#!/usr/bin/env python # Copyright 2022 The Chromium Authors # 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 logging import os import sys 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('--chromium-src-dir', help='directory for chromium/src checkout') parser.add_argument('--build-dir', help='directory for the build directory in chromium/src') return parser def main(): parser = _MergeAPIArgumentParser() params = parser.parse_args() parsed_scripts = javascript_merger.write_parsed_scripts( params.task_output_dir) # Ensure JavaScript coverage dir exists. if not os.path.exists(params.javascript_coverage_dir): os.makedirs(params.javascript_coverage_dir) if not parsed_scripts: logging.warning('No parsed scripts written') return 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, exist_ok=True) 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) logging.info('Excluding uninteresting lines from coverage') javascript_merger.exclude_uninteresting_lines(coverage_file_path) logging.info('Remapping all paths relative to the src dir and removing any ' 'files in the out dir') javascript_merger.remap_paths_to_relative(coverage_file_path, params.chromium_src_dir, params.build_dir) logging.info('Creating lcov report at %s', params.javascript_coverage_dir) javascript_merger.generate_coverage_reports(output_dir, params.javascript_coverage_dir) except RuntimeError as e: logging.warning('Failed executing istanbul tasks: %s', e) if __name__ == '__main__': logging.basicConfig(format='[%(asctime)s %(levelname)s] %(message)s', level=logging.INFO) sys.exit(main())