def create_revision_map(self, repos: List[Repo]) -> RevisionMap: """ Create a map of the repos and the given revisions to diff against. :param repos: List of repos being tracked. :return: Map of repositories and revisions to diff against. """ return generate_revision_map_from_manifest(repos, self.task_id, self.evg_api)
def run(evg_api: EvergreenApi, evg_conf: EvergreenProjectConfig, selected_tests_service: SelectedTestsService, selected_tests_variant_expansions: Dict[str, str], repos: List[Repo]) -> Dict[str, str]: # pylint: disable=too-many-locals """ Run code to select tasks to run based on test and task mappings for each of the build variants. :param evg_api: Evergreen API object. :param evg_conf: Evergreen configuration. :param selected_tests_service: Selected-tests service. :param selected_tests_variant_expansions: Expansions of the selected-tests variant. :param repos: List of repos containing changed files. :return: Dict of files and file contents for generated tasks. """ config_dict_of_suites_and_tasks = {} task_id = selected_tests_variant_expansions[TASK_ID_EXPANSION] revision_map = generate_revision_map_from_manifest(repos, task_id, evg_api) changed_files = find_changed_files_in_repos(repos, revision_map) changed_files = {_remove_repo_path_prefix(file_path) for file_path in changed_files} LOGGER.info("Found changed files", files=changed_files) shrub_project = ShrubProject() for build_variant_config in evg_conf.get_required_variants(): shrub_build_variant = BuildVariant(build_variant_config.name) origin_variant_expansions = build_variant_config.expansions task_configs = _get_task_configs(evg_conf, selected_tests_service, selected_tests_variant_expansions, build_variant_config, changed_files) remove_task_configs_already_in_build(task_configs, evg_api, build_variant_config, selected_tests_variant_expansions["version_id"]) for task_config in task_configs.values(): Suite.reset_current_index() config_options = SelectedTestsConfigOptions.from_file( origin_variant_expansions, selected_tests_variant_expansions, task_config, REQUIRED_CONFIG_KEYS, DEFAULT_CONFIG_VALUES, CONFIG_FORMAT_FN, ) _update_config_with_task(evg_api, shrub_build_variant, config_options, config_dict_of_suites_and_tasks) shrub_project.add_build_variant(shrub_build_variant) config_dict_of_suites_and_tasks["selected_tests_config.json"] = shrub_project.json() return config_dict_of_suites_and_tasks
def find_changed_files(self, repos: List[Repo], task_id: str) -> Set[str]: """ Determine what files have changed in the given repos. :param repos: List of git repos to query. :param task_id: ID of task being run. :return: Set of files that contain changes. """ revision_map = generate_revision_map_from_manifest(repos, task_id, self.evg_api) changed_files = find_changed_files_in_repos(repos, revision_map) changed_files = {_remove_repo_path_prefix(file_path) for file_path in changed_files} changed_files = { file_path for file_path in changed_files if not file_path.startswith("src/third_party") } LOGGER.info("Found changed files", files=changed_files) return changed_files
def test_map_can_be_created_from_evergreen_api(self): mock_repo_list = [ create_mock_repo(os.getcwd()), create_mock_repo("/path/to/enterprise") ] mongo_revision = "revision1234" enterprise_revision = "revision5678" mock_manifest = MagicMock( revision=mongo_revision, modules={"enterprise": MagicMock(revision=enterprise_revision)}) mock_evg_api = MagicMock() mock_evg_api.manifest_for_task.return_value = mock_manifest revision_map = under_test.generate_revision_map_from_manifest( mock_repo_list, "task_id", mock_evg_api) self.assertEqual(revision_map[mock_repo_list[0].git_dir], mongo_revision) self.assertEqual(revision_map[mock_repo_list[1].git_dir], enterprise_revision)