Add --build-data flag to mbed test

pull/4110/head
Jimmy Brisson 2017-04-06 11:17:54 -05:00
parent aeb6109717
commit 808279911c
3 changed files with 36 additions and 23 deletions

View File

@ -21,9 +21,11 @@ import datetime
from types import ListType from types import ListType
from shutil import rmtree from shutil import rmtree
from os.path import join, exists, dirname, basename, abspath, normpath, splitext from os.path import join, exists, dirname, basename, abspath, normpath, splitext
from os.path import relpath
from os import linesep, remove, makedirs from os import linesep, remove, makedirs
from time import time from time import time
from intelhex import IntelHex from intelhex import IntelHex
from json import load, dump
from tools.utils import mkdir, run_cmd, run_cmd_ext, NotSupportedException,\ from tools.utils import mkdir, run_cmd, run_cmd_ext, NotSupportedException,\
ToolException, InvalidReleaseTargetException, intelhex_offset ToolException, InvalidReleaseTargetException, intelhex_offset
@ -1365,3 +1367,22 @@ def write_build_report(build_report, template_filename, filename):
placeholder.write(template.render( placeholder.write(template.render(
failing_builds=build_report_failing, failing_builds=build_report_failing,
passing_builds=build_report_passing)) passing_builds=build_report_passing))
def merge_build_data(filename, toolchain_report):
path_to_file = dirname(abspath(filename))
try:
build_data = load(open(filename))
except (IOError, ValueError):
build_data = {'builds': []}
for tgt in toolchain_report.values():
for tc in tgt.values():
for project in tc.values():
for build in project:
try:
build[0]['elf'] = relpath(build[0]['elf'], path_to_file)
build[0]['bin'] = relpath(build[0]['bin'], path_to_file)
except KeyError:
pass
build_data['builds'].append(build[0])
dump(build_data, open(filename, "wb"), indent=4, separators=(',', ': '))

View File

@ -49,24 +49,13 @@ from tools.build_api import build_project
from tools.build_api import mcu_toolchain_matrix from tools.build_api import mcu_toolchain_matrix
from tools.build_api import mcu_toolchain_list from tools.build_api import mcu_toolchain_list
from tools.build_api import mcu_target_list from tools.build_api import mcu_target_list
from tools.build_api import merge_build_data
from utils import argparse_filestring_type from utils import argparse_filestring_type
from utils import argparse_many from utils import argparse_many
from utils import argparse_dir_not_parent from utils import argparse_dir_not_parent
from tools.toolchains import mbedToolchain, TOOLCHAIN_CLASSES, TOOLCHAIN_PATHS from tools.toolchains import mbedToolchain, TOOLCHAIN_CLASSES, TOOLCHAIN_PATHS
from tools.settings import CLI_COLOR_MAP from tools.settings import CLI_COLOR_MAP
def merge_build_data(filename, toolchain_report):
try:
build_data = load(open(filename))
except (IOError, ValueError):
build_data = {'builds': []}
for tgt in toolchain_report.values():
for tc in tgt.values():
for project in tc.values():
for build in project:
build_data['builds'].append(build[0])
dump(build_data, open(filename, "wb"), indent=4, separators=(',', ': '))
if __name__ == '__main__': if __name__ == '__main__':
# Parse Options # Parse Options
parser = get_default_options_parser(add_app_config=True) parser = get_default_options_parser(add_app_config=True)

View File

@ -31,6 +31,7 @@ from tools.test_api import test_path_to_name, find_tests, print_tests, build_tes
from tools.options import get_default_options_parser, extract_profile from tools.options import get_default_options_parser, extract_profile
from tools.build_api import build_project, build_library from tools.build_api import build_project, build_library
from tools.build_api import print_build_memory_usage from tools.build_api import print_build_memory_usage
from tools.build_api import merge_build_data
from tools.targets import TARGET_MAP from tools.targets import TARGET_MAP
from tools.utils import mkdir, ToolException, NotSupportedException, args_error from tools.utils import mkdir, ToolException, NotSupportedException, args_error
from tools.test_exporters import ReportExporter, ResultExporterType from tools.test_exporters import ReportExporter, ResultExporterType
@ -88,6 +89,10 @@ if __name__ == '__main__':
parser.add_argument("--build-report-junit", dest="build_report_junit", parser.add_argument("--build-report-junit", dest="build_report_junit",
default=None, help="Destination path for a build report in the JUnit xml format") default=None, help="Destination path for a build report in the JUnit xml format")
parser.add_argument("--build-data",
dest="build_data",
default=None,
help="Dump build_data to this file")
parser.add_argument("-v", "--verbose", parser.add_argument("-v", "--verbose",
action="store_true", action="store_true",
@ -175,16 +180,12 @@ if __name__ == '__main__':
profile = extract_profile(parser, options, toolchain) profile = extract_profile(parser, options, toolchain)
try: try:
# Build sources # Build sources
build_library(base_source_paths, options.build_dir, mcu, toolchain, build_library(base_source_paths, options.build_dir, mcu,
jobs=options.jobs, toolchain, jobs=options.jobs,
clean=options.clean, clean=options.clean, report=build_report,
report=build_report, properties=build_properties, name="mbed-build",
properties=build_properties, macros=options.macros, verbose=options.verbose,
name="mbed-build", notify=notify, archive=False,
macros=options.macros,
verbose=options.verbose,
notify=notify,
archive=False,
app_config=options.app_config, app_config=options.app_config,
build_profile=profile) build_profile=profile)
@ -245,6 +246,8 @@ if __name__ == '__main__':
print_report_exporter = ReportExporter(ResultExporterType.PRINT, package="build") print_report_exporter = ReportExporter(ResultExporterType.PRINT, package="build")
status = print_report_exporter.report(build_report) status = print_report_exporter.report(build_report)
if options.build_data:
merge_build_data(options.build_data, build_report)
if status: if status:
sys.exit(0) sys.exit(0)