def generate_project_test_mappings(
    evg_api: EvergreenApi,
    evergreen_project: str,
    temp_dir: str,
    source_re: Pattern,
    test_re: Pattern,
    commit_limit: CommitLimit,
) -> Tuple[list, str]:
    """
    Generate test mappings for an evergreen project.

    :param evg_api: An instance of the evg_api client
    :param evergreen_project: The name of the evergreen project to analyze.
    :param temp_dir: The place where to clone the repo to.
    :param source_re: Regex pattern to match changed source files against.
    :param test_re: Regex pattern to match changed test files against.
    :param commit_limit: The point at which to start analyzing project commits's repo.
    :return: A list of test mappings for the project and the most recent commit sha analyzed.
    """
    evg_project = get_evg_project(evg_api, evergreen_project)
    if evg_project is None:
        raise ValueError(
            f"There is no evergreen project named {evergreen_project}")
    project_repo = init_repo(temp_dir, evg_project.repo_name,
                             evg_project.branch_name, evg_project.owner_name)
    most_recent_project_commit_analyzed = project_repo.head.commit.hexsha
    LOGGER.info(
        "Calculated most_recent_project_commit_analyzed",
        most_recent_project_commit_analyzed=most_recent_project_commit_analyzed,
    )
    project_test_mappings = TestMappings.create_mappings(
        project_repo, source_re, test_re, commit_limit, evergreen_project,
        evg_project.branch_name)
    return project_test_mappings.get_mappings(
    ), most_recent_project_commit_analyzed
def _get_evg_project_and_init_repo(evg_api: EvergreenApi,
                                   evergreen_project: str,
                                   temp_dir: str) -> Repo:
    project_info = get_evg_project(evg_api, evergreen_project)
    if project_info is None:
        raise ValueError(
            f"The evergreen project {evergreen_project} does not exist")
    return init_repo(temp_dir, project_info.repo_name,
                     project_info.branch_name, project_info.owner_name)
    def test_project_does_not_exist(self):
        evg_api_mock = MagicMock()
        evg_api_mock.all_projects.return_value = [
            MagicMock(identifier=f"project_{i}", owner_name=f"owner_{i}")
            for i in range(3)
        ]
        project_name = "project_4"

        project = under_test.get_evg_project(evg_api_mock, project_name)
        assert not project
Example #4
0
def try_retrieve_evergreen_project(project: str, api: EvergreenApi) -> Project:
    """
    Get the Evergreen project for a request by project id.

    :param project: The project id.
    :param api: The Evergreen API client.
    :return: The project.
    """
    evergreen_project = get_evg_project(api, project)
    if not evergreen_project:
        raise HTTPException(status_code=404,
                            detail="Evergreen project not found")
    return evergreen_project
Example #5
0
def create_test_mapping(ctx: Context, project: str, src_regex: str, test_file_regex: str) -> None:
    """
    Add a project to the queue to be tracked for test mappings.

    This command is meant for testing purposes only. Adding new projects to the task mappings
    should normally be done via the REST API.
    \f
    :param ctx: Command Context.
    :param project: Evergreen project to add to queue.
    :param src_regex: Regular expression for project source files.
    :param test_file_regex: Regular expression for project test files.
    """
    evergreen_project = get_evg_project(ctx.obj["evg_api"], project)
    if not evergreen_project:
        raise ValueError("Evergreen project not found")

    work_item = ProjectTestMappingWorkItem.new_test_mappings(project, src_regex, test_file_regex)
    work_item.insert(ctx.obj["mongo"].test_mappings_queue())