def load_transforms(cls, transforms_cfg): """Load the transforms specified in kind.yml""" transforms = [] for path in transforms_cfg: transform = find_object(path) transforms.append(transform) return transforms
def load_transforms(cls, transforms_cfg): """Load the transforms specified in kind.yml""" transforms = [] for path in transforms_cfg: transform = find_object(path) transforms.append(transform) return transforms
def try_config(self, strategy, **kwargs): if strategy: if ':' not in strategy: strategy = "taskgraph.optimize:tryselect.{}".format(strategy) try: obj = find_object(strategy) except (ImportError, AttributeError): print("error: invalid module path '{}'".format(strategy)) sys.exit(1) if not isinstance(obj, dict): print("error: object at '{}' must be a dict".format(strategy)) sys.exit(1) return { 'optimize-strategies': strategy, }
def _get_loader(path, config): try: loader = config['loader'] except KeyError: raise KeyError("{!r} does not define `loader`".format(path)) return find_object(loader)
def get_decision_parameters(graph_config, options): """ Load parameters from the command-line options for 'taskgraph decision'. This also applies per-project parameters, based on the given project. """ parameters = { n: options[n] for n in [ "base_repository", "head_repository", "head_rev", "head_ref", "head_tag", "project", "pushlog_id", "pushdate", "repository_type", "owner", "level", "target_tasks_method", "tasks_for", ] if n in options } repo = get_repository(os.getcwd()) commit_message = repo.get_commit_message() # Define default filter list, as most configurations shouldn't need # custom filters. parameters["filters"] = [ "target_tasks_method", ] parameters["optimize_target_tasks"] = True parameters["existing_tasks"] = {} parameters["do_not_optimize"] = [] # owner must be an email, but sometimes (e.g., for ffxbld) it is not, in which # case, fake it if "@" not in parameters["owner"]: parameters["owner"] += "@noreply.mozilla.org" # use the pushdate as build_date if given, else use current time parameters["build_date"] = parameters["pushdate"] or int(time.time()) # moz_build_date is the build identifier based on build_date parameters["moz_build_date"] = time.strftime( "%Y%m%d%H%M%S", time.gmtime(parameters["build_date"])) project = parameters["project"] try: parameters.update(PER_PROJECT_PARAMETERS[project]) except KeyError: logger.warning("using default project parameters; add {} to " "PER_PROJECT_PARAMETERS in {} to customize behavior " "for this project".format(project, __file__)) parameters.update(PER_PROJECT_PARAMETERS["default"]) # `target_tasks_method` has higher precedence than `project` parameters if options.get("target_tasks_method"): parameters["target_tasks_method"] = options["target_tasks_method"] # ..but can be overridden by the commit message: if it contains the special # string "DONTBUILD" and this is an on-push decision task, then use the # special 'nothing' target task method. if "DONTBUILD" in commit_message and options["tasks_for"] == "hg-push": parameters["target_tasks_method"] = "nothing" if options.get("optimize_target_tasks") is not None: parameters["optimize_target_tasks"] = options["optimize_target_tasks"] if "decision-parameters" in graph_config["taskgraph"]: find_object(graph_config["taskgraph"]["decision-parameters"])( graph_config, parameters) if options.get("try_task_config_file"): task_config_file = os.path.abspath(options.get("try_task_config_file")) else: # if try_task_config.json is present, load it task_config_file = os.path.join(os.getcwd(), "try_task_config.json") # load try settings if ("try" in project and options["tasks_for"] == "hg-push") or options["tasks_for"] == "github-pull-request": set_try_config(parameters, task_config_file) result = Parameters(**parameters) result.check() return result