def _build(unknown_args): link_std_modules() link_mounted_modules() current_target = get_current_target() globalconf.set('plain', False) args = argparse.Namespace(config=None, cmake_generator='Ninja', debug=None, generate_only=False, interactive=False, target=current_target, plain=False, release_build=True, registry=None) build_status = build.installAndBuild(args, unknown_args) if all(value == 0 for value in build_status.values()): print '\nBuild Succeeded' else: print '\nBuild Failed'
def execCommand(args, following_args): # remove the pseudo-name 'all': it wouldn't be recognised by build/cmake all_tests = 'all' in args.tests if all_tests: args.tests.remove('all') returncode = 0 if args.build and not args.list_only: # we need to build before testing, make sure that any tests needed are # built: if all_tests: vars(args)['build_targets'] = args.tests + ['all_tests'] else: vars(args)['build_targets'] = args.tests build_status = build.installAndBuild(args, following_args) # a generate or build step failure is fatal, but an install-step # failure should not prevent attempting tests: if build_status.get('generate_status', 0) != 0 or \ build_status.get('build_status', 0) != 0 or \ build_status.get('missing_status', 0) != 0: return 1 else: returncode = build_status['status'] cwd = os.getcwd() c = validate.currentDirectoryModule() if not c: return 1 target, errors = c.satisfyTarget(args.target, additional_config=args.config) if errors: for error in errors: logging.error(error) return 1 all_modules = c.getDependenciesRecursive(target=target, available_components=[ (c.getName(), c) ], test=True) builddir = os.path.join(cwd, 'build', target.getName()) # get the list of tests we need to run, if --all is specified we also run # the tests for all of our submodules, otherwise we just run the tests for # this module. # If we have specific test specified, we also need to search for all the # tests, in case the specific test does not belong to this module tests = findCTests(builddir, recurse_yotta_modules=(all_tests or len(args.tests))) errcode = c.runScript('preTest') if errcode: return errcode passed = 0 failed = 0 for dirname, test_definitions in tests: module = moduleFromDirname(os.path.relpath(dirname, builddir), all_modules, c) logging.debug('inferred module %s from path %s', module.getName(), os.path.relpath(dirname, builddir)) if (not len(args.tests)) and (module is not c) and not all_tests: continue info_filter = True filter_command = module.getScript('testReporter') for test_name, test_command in test_definitions: if len(args.tests) and not test_name in args.tests: logging.debug('skipping not-listed test %s: %s', test_name, test_command) continue if info_filter and filter_command: info_filter = False logging.info('using filter "%s" for tests in %s', ' '.join(filter_command), dirname) logging.info('test %s: %s', module.getName(), test_name) if args.list_only: continue test_returncode = target.test(test_dir=dirname, module_dir=module.path, test_command=test_command, filter_command=filter_command, forward_args=following_args) if test_returncode: logging.error('test %s failed (command: %s)', test_name, test_command) failed += 1 if not returncode: returncode = 1 else: logging.info('test %s passed', test_name) passed += 1 if not args.list_only: logging.info("tests complete: %d passed, %d failed", passed, failed) return returncode
def execCommand(args, following_args): # remove the pseudo-name 'all': it wouldn't be recognised by build/cmake all_tests = 'all' in args.tests if all_tests: args.tests.remove('all') returncode = 0 if args.build and not args.list_only: # we need to build before testing, make sure that any tests needed are # built: if all_tests: vars(args)['build_targets'] = args.tests + ['all_tests'] else: vars(args)['build_targets'] = args.tests build_status = build.installAndBuild(args, following_args) # a generate or build step failure is fatal, but an install-step # failure should not prevent attempting tests: if build_status.get('generate_status', 0) != 0 or \ build_status.get('build_status', 0) != 0 or \ build_status.get('missing_status', 0) != 0: return 1 else: returncode = build_status['status'] cwd = os.getcwd() c = validate.currentDirectoryModule() if not c: return 1 target, errors = c.satisfyTarget(args.target, additional_config=args.config) if errors: for error in errors: logging.error(error) return 1 all_modules = c.getDependenciesRecursive( target = target, available_components = [(c.getName(), c)], test = True ) builddir = os.path.join(cwd, 'build', target.getName()) # get the list of tests we need to run, if --all is specified we also run # the tests for all of our submodules, otherwise we just run the tests for # this module. # If we have specific test specified, we also need to search for all the # tests, in case the specific test does not belong to this module tests = findCTests(builddir, recurse_yotta_modules=(all_tests or len(args.tests))) errcode = c.runScript('preTest') if errcode: return errcode passed = 0 failed = 0 for dirname, test_definitions in tests: module = moduleFromDirname(os.path.relpath(dirname, builddir), all_modules, c) logging.debug('inferred module %s from path %s', module.getName(), os.path.relpath(dirname, builddir)) if (not len(args.tests)) and (module is not c) and not all_tests: continue info_filter = True filter_command = module.getScript('testReporter') for test_name, test_command in test_definitions: if len(args.tests) and not test_name in args.tests: logging.debug('skipping not-listed test %s: %s', test_name, test_command) continue if info_filter and filter_command: info_filter = False logging.info('using filter "%s" for tests in %s', ' '.join(filter_command), dirname) logging.info('test %s: %s', module.getName(), test_name) if args.list_only: continue test_returncode = target.test( test_dir = dirname, module_dir = module.path, test_command = test_command, filter_command = filter_command, forward_args = following_args ) if test_returncode: logging.error('test %s failed (command: %s)', test_name, test_command) failed += 1 if not returncode: returncode = 1 else: logging.info('test %s passed', test_name) passed += 1 if not args.list_only: logging.info("tests complete: %d passed, %d failed", passed, failed) return returncode