def _find_task(build_variant_config: Variant, task_name: str) -> Task: """ Look up shrub config for task. :param build_variant_config: Config of build variant to collect task info from. :param task_name: Name of task to get info for. :return: Task configuration. """ task = build_variant_config.get_task(task_name) if not task: task = build_variant_config.get_task(task_name + "_gen") return task
def get_evg_task_config(task: Task, build_variant_config: Variant) -> Dict[str, Any]: """ Look up task config of the task to be generated. :param task: Task to get info for. :param build_variant_config: Config of build variant to collect task info from. :return: Task configuration values. """ LOGGER.info("Calculating evg_task_config values for task", task=task.name) task_vars = {} for run_task_func in POSSIBLE_RUN_TASK_FUNCS: task_def = task.find_func_command(run_task_func) if task_def: task_vars = task_def.get("vars", {}) break task_vars.update({"suite": task.get_suite_name()}) task_name = task.name[:-4] if task.name.endswith("_gen") else task.name return { "task_name": task_name, "build_variant": build_variant_config.name, **task_vars, "large_distro_name": build_variant_config.expansion("large_distro_name"), }
def build_mock_build_variant(expansions=None, task_list=None): task_spec_list = [{"name": task.name} for task in task_list] if task_list else [] config = { "tasks": task_spec_list, } if expansions: config["expansions"] = expansions if task_list is None: task_list = [] task_map = {task.name: task for task in task_list} return Variant(config, task_map, {})
def generate_build_variant(self, build_variant_config: Variant, changed_files: Set[str], builder: EvgConfigBuilder) -> None: """ Generate the selected tasks on the specified build variant. :param build_variant_config: Configuration of build variant to generate. :param changed_files: List of file changes to determine what to run. :param builder: Builder to create new configuration. """ build_variant_name = build_variant_config.name LOGGER.info("Generating build variant", build_variant=build_variant_name) task_configs = self.get_task_config(build_variant_config, changed_files) for task_config in task_configs.values(): task_def = Task(task_config) test_filter = None if "selected_tests_to_run" in task_config: test_filter = partial( filter_set, input_set=task_config["selected_tests_to_run"]) split_params = SuiteSplitParameters( build_variant=build_variant_name, task_name=task_config["task_name"], suite_name=task_config.get("suite", task_config["task_name"]), filename=task_config.get("suite", task_config["task_name"]), test_file_filter=test_filter, is_asan=build_variant_config.is_asan_build(), ) gen_params = ResmokeGenTaskParams( use_large_distro=task_config.get("use_large_distro", False), large_distro_name=task_config.get("large_distro_name"), require_multiversion_setup=task_def.require_multiversion_setup( ), require_multiversion_version_combo=False, repeat_suites=task_config.get("repeat_suites", 1), resmoke_args=task_config.get("resmoke_args", ""), resmoke_jobs_max=task_config.get("resmoke_jobs_max"), config_location=self.evg_expansions.get_config_location(), dependencies={ depends_on["name"] for depends_on in task_def.depends_on }, ) builder.generate_suite(split_params, gen_params)
def translate_run_var(run_var: str, build_variant: Variant) -> Any: """ Translate the given "run_var" into an actual value. Run_vars can contain evergreen expansions, in which case, the expansion (and possible default value) need to be translated into a value we can use. :param run_var: Run var to translate. :param build_variant: Build variant configuration. :return: Value of run_var. """ match = EXPANSION_RE.search(run_var) if match: value = build_variant.expansion(match.group("id")) if value is None: value = match.group("default") return value return run_var
def _get_evg_task_config( selected_tests_variant_expansions: Dict[str, str], task_name: str, build_variant_config: Variant, ) -> Dict[str, Any]: """ Look up task config of the task to be generated. :param selected_tests_variant_expansions: Expansions of the selected-tests variant. :param task_name: Task to get info for. :param build_variant_config: Config of build variant to collect task info from. :return: Task configuration values. """ task = build_variant_config.get_task(task_name) if task.is_generate_resmoke_task: task_vars = task.generate_resmoke_tasks_command["vars"] else: task_vars = task.run_tests_command["vars"] task_vars.update({"fallback_num_sub_suites": "1"}) suite_name = ResmokeArgs.get_arg(task_vars["resmoke_args"], "suites") if suite_name: task_vars.update({"suite": suite_name}) # the suites argument will run all tests in a suite even when individual # tests are specified in resmoke_args, so we remove it resmoke_args_without_suites = ResmokeArgs.remove_arg( task_vars["resmoke_args"], "suites") task_vars["resmoke_args"] = resmoke_args_without_suites selected_tests_task_config = _get_selected_tests_task_config( selected_tests_variant_expansions) return { "task_name": task.name, "build_variant": build_variant_config.name, **task_vars, **selected_tests_task_config }
def get_evg_task_config(task: Task, build_variant_config: Variant) -> Dict[str, Any]: """ Look up task config of the task to be generated. :param task: Task to get info for. :param build_variant_config: Config of build variant to collect task info from. :return: Task configuration values. """ LOGGER.info("Calculating evg_task_config values for task", task=task.name) task_vars = {} for run_task_func in POSSIBLE_RUN_TASK_FUNCS: task_def = task.find_func_command(run_task_func) if task_def: task_vars = task_def["vars"] break suite_name = ResmokeArgs.get_arg(task_vars["resmoke_args"], "suites") if suite_name: task_vars.update({"suite": suite_name}) # the suites argument will run all tests in a suite even when individual # tests are specified in resmoke_args, so we remove it resmoke_args_without_suites = ResmokeArgs.remove_arg( task_vars["resmoke_args"], "suites") task_vars["resmoke_args"] = resmoke_args_without_suites task_name = task.name[:-4] if task.name.endswith("_gen") else task.name return { "task_name": task_name, "build_variant": build_variant_config.name, **task_vars, "large_distro_name": build_variant_config.expansion("large_distro_name"), }