#!/usr/bin/env python3
# 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.
"""Get test health information for a Git repository.
Example Usage:
tools/android/test_health/get_test_health.py \
--output-file ~/test_data.jsonl \
--git-dir ~/git/chromium/src \
--test-dir chrome/browser/android
"""
import argparse
import logging
import pathlib
import time
import test_health_exporter
import test_health_extractor
def main():
parser = argparse.ArgumentParser(
description='Gather Java test health information for a Git repository'
' and export it as newline-delimited JSON.')
parser.add_argument('-o',
'--output-file',
type=pathlib.Path,
required=True,
help='output file path for extracted test health data')
parser.add_argument('--git-dir',
type=pathlib.Path,
required=False,
help='root directory of the Git repository to read'
' (defaults to the Chromium repo)')
parser.add_argument('--test-dir',
type=pathlib.Path,
required=False,
help='subdirectory containing the tests of interest;'
' defaults to the root of the Git repo')
parser.add_argument('-v',
'--verbose',
action='store_true',
help='Used to display detailed logging.')
args = parser.parse_args()
if args.verbose:
level = logging.DEBUG
else:
level = logging.INFO
logging.basicConfig(
level=level, format='%(levelname).1s %(relativeCreated)6d %(message)s')
logging.info('Extracting test health data from Git repo.')
start_time = time.time()
test_health_list = test_health_extractor.get_repo_test_health(
args.git_dir, test_dir=args.test_dir)
extraction_time = time.time() - start_time
logging.debug(f'--- Extraction took {extraction_time:.2f} seconds ---')
logging.info('Exporting test health data to file: ' +
str(args.output_file))
export_start_time = time.time()
test_health_exporter.to_json_file(test_health_list, args.output_file)
export_time = time.time() - export_start_time
logging.debug(f'--- Export took {export_time:.2f} seconds ---')
total_time = time.time() - start_time
logging.debug(f'--- Took {total_time:.2f} seconds ---')
if __name__ == '__main__':
main()