def main(): args = parse_args() # Add log level 'VERBOSE' between INFO and DEBUG log.addLevelName(VERBOSE, 'VERBOSE') log_format = '%(levelname)s: [%(module)s] %(message)s' log_level = log.INFO if args.verbose == "default": log_level = VERBOSE elif args.verbose == "debug": log_level = log.DEBUG log.basicConfig(format=log_format, level=log_level) if not os.path.exists(args.cfg): log.fatal("Path to config file %s appears to be invalid.", args.cfg) sys.exit(1) # If publishing results, then force full testplan mapping of results. if args.publish: args.map_full_testplan = True args.scratch_root = resolve_scratch_root(args.scratch_root) args.branch = resolve_branch(args.branch) proj_root_src, proj_root = resolve_proj_root(args) log.info("[proj_root]: %s", proj_root) # Create an empty FUSESOC_IGNORE file in scratch_root. This ensures that # any fusesoc invocation from a job won't search within scratch_root for # core files. (Path(args.scratch_root) / 'FUSESOC_IGNORE').touch() args.cfg = os.path.abspath(args.cfg) if args.remote: cfg_path = args.cfg.replace(proj_root_src + "/", "") args.cfg = os.path.join(proj_root, cfg_path) # Add timestamp to args that all downstream objects can use. curr_ts = datetime.datetime.utcnow() setattr(args, "timestamp_long", curr_ts.strftime(TS_FORMAT_LONG)) setattr(args, "timestamp", curr_ts.strftime(TS_FORMAT)) # Register the seeds from command line with RunTest class. RunTest.seeds = args.seeds # If we are fixing a seed value, no point in tests having multiple reseeds. if args.fixed_seed: args.reseed = 1 RunTest.fixed_seed = args.fixed_seed # Register the common deploy settings. Timer.print_interval = args.print_interval Scheduler.max_parallel = args.max_parallel Launcher.max_odirs = args.max_odirs # Build infrastructure from hjson file and create the list of items to # be deployed. global cfg cfg = make_cfg(args.cfg, args, proj_root) # List items available for run if --list switch is passed, and exit. if args.list is not None: cfg.print_list() sys.exit(0) # Purge the scratch path if --purge option is set. if args.purge: cfg.purge() # If --cov-unr is passed, run UNR to generate report for unreachable # exclusion file. if args.cov_unr: cfg.cov_unr() cfg.deploy_objects() sys.exit(0) # In simulation mode: if --cov-analyze switch is passed, then run the GUI # tool. if args.cov_analyze: cfg.cov_analyze() cfg.deploy_objects() sys.exit(0) # Deploy the builds and runs if args.items != []: # Create deploy objects. cfg.create_deploy_objects() results = cfg.deploy_objects() # Generate results. cfg.gen_results(results) # Publish results if args.publish: cfg.publish_results() else: log.info("No items specified to be run.") # Exit with non-zero status if there were errors or failures. if cfg.has_errors(): log.error("Errors were encountered in this run.") sys.exit(1)
def main(): args = parse_args() # Add log level 'VERBOSE' between INFO and DEBUG log.addLevelName(utils.VERBOSE, 'VERBOSE') log_format = '%(levelname)s: [%(module)s] %(message)s' log_level = log.INFO if args.verbose == "default": log_level = utils.VERBOSE elif args.verbose == "debug": log_level = log.DEBUG log.basicConfig(format=log_format, level=log_level) if not os.path.exists(args.cfg): log.fatal("Path to config file %s appears to be invalid.", args.cfg) sys.exit(1) # If publishing results, then force full testplan mapping of results. if args.publish: args.map_full_testplan = True args.scratch_root = resolve_scratch_root(args.scratch_root) args.branch = resolve_branch(args.branch) proj_root_src, proj_root = resolve_proj_root(args) log.info("[proj_root]: %s", proj_root) args.cfg = os.path.abspath(args.cfg) if args.remote: cfg_path = args.cfg.replace(proj_root_src + "/", "") args.cfg = os.path.join(proj_root, cfg_path) # Add timestamp to args that all downstream objects can use. # Static variables - indicate timestamp. ts_format_long = "%A %B %d %Y %I:%M:%S%p UTC" ts_format = "%a.%m.%d.%y__%I.%M.%S%p" curr_ts = datetime.datetime.utcnow() timestamp_long = curr_ts.strftime(ts_format_long) timestamp = curr_ts.strftime(ts_format) setattr(args, "ts_format_long", ts_format_long) setattr(args, "ts_format", ts_format) setattr(args, "timestamp_long", timestamp_long) setattr(args, "timestamp", timestamp) # Register the seeds from command line with RunTest class. Deploy.RunTest.seeds = args.seeds # If we are fixing a seed value, no point in tests having multiple reseeds. if args.fixed_seed: args.reseed = 1 Deploy.RunTest.fixed_seed = args.fixed_seed # Register the common deploy settings. Deploy.Deploy.print_interval = args.print_interval Deploy.Deploy.max_parallel = args.max_parallel Deploy.Deploy.max_odirs = args.max_odirs # Build infrastructure from hjson file and create the list of items to # be deployed. global cfg cfg = make_cfg(args.cfg, args, proj_root) # Handle Ctrl-C exit. signal(SIGINT, sigint_handler) # List items available for run if --list switch is passed, and exit. if args.list is not None: cfg.print_list() sys.exit(0) # Purge the scratch path if --purge option is set. if args.purge: cfg.purge() # If --cov-unr is passed, run UNR to generate report for unreachable # exclusion file. if args.cov_unr: cfg.cov_unr() cfg.deploy_objects() sys.exit(0) # In simulation mode: if --cov-analyze switch is passed, then run the GUI # tool. if args.cov_analyze: cfg.cov_analyze() cfg.deploy_objects() sys.exit(0) # Deploy the builds and runs if args.items != []: # Create deploy objects. cfg.create_deploy_objects() cfg.deploy_objects() # Generate results. cfg.gen_results() # Publish results if args.publish: cfg.publish_results() else: log.info("No items specified to be run.") # Exit with non-zero status if there were errors or failures. if cfg.has_errors(): log.error("Errors were encountered in this run.") sys.exit(1)