Example #1
0
def _unique_build_request(buildername, revision):
    """ Prevent scheduling the same build more than once."""
    if is_upstream(buildername) and \
       revision in SCHEDULING_MANAGER and \
       buildername in SCHEDULING_MANAGER[revision]:
        LOG.info("We have already scheduled the build '%s' for "
                 "revision %s during this session. We don't allow "
                 "multiple requests." % (buildername, revision))
        return False
    else:
        return True
Example #2
0
def _unique_build_request(buildername, revision):
    """ Prevent scheduling the same build more than once."""
    if is_upstream(buildername) and \
       revision in SCHEDULING_MANAGER and \
       buildername in SCHEDULING_MANAGER[revision]:
        LOG.debug("We have already scheduled the build '%s' for "
                  "revision %s during this session. We don't allow "
                  "multiple requests." % (buildername, revision))
        return False
    else:
        return True
def _generate_tc_tasks_from_builders(builders, repo_name, revision):
    """ Return TC tasks based on a list of builders.

    Input: a list of builders and a revision
    Output: list of TC tasks base on builders we receive

    :param builders: List of builder names
    :type builders: list
    :param repo_name: push revision
    :type repo_name: str
    :param revision: push revision
    :type revision: str
    :return: TC tasks
    :rtype: dict

    """
    tasks = []
    build_builders = {}

    # We need to determine what upstream jobs need to be triggered besides the
    # builders already on our list
    for builder in builders:
        if is_upstream(builder):
            properties = {'upload_to_task_id': slugId()}

            # Bug 1274483 - Android multi-locale nightly builds need to upload to two different
            # tasks, thus, it fails when we tell it to upload to the same task twice.
            builder_details = get_buildername_metadata(builder)
            if builder_details['platform_name'].startswith('android') and \
               builder_details['nightly'] is True and \
               'l10n' not in builder:
                properties = {}

            task = _create_task(
                buildername=builder,
                repo_name=repo_name,
                revision=revision,
                # task_graph_id=task_graph_id,
                properties=properties,
            )
            tasks.append(task)

            # We want to keep track of how many build builders we have
            build_builders[builder] = task

    for builder in builders:
        if is_downstream(builder):
            # For test jobs, determine_trigger_objective()[0] can be 3 things:
            # - the build job, if no build job exists
            # - the test job, if the build job is already completed
            # - None, if the build job is running
            objective, package_url, tests_url = \
                determine_trigger_objective(revision, builder)

            # The build job is already completed, we can trigger the test job
            if objective == builder:
                if objective in build_builders:
                    LOG.warning("We're creating a new build even though there's "
                                "already an existing completed build we could have "
                                "used. We hope you wanted to do this.")
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        # task_graph_id=task_graph_id,
                        parent_task_id=build_builders[objective]['taskId'],
                        properties={'upload_to_task_id': slugId()},
                    )
                    tasks.append(task)
                else:
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        properties={
                            'packageUrl': package_url,
                            'testUrl': tests_url
                        },
                    )
                    tasks.append(task)

            # The build job is running, there is nothing we can do
            elif objective is None:
                LOG.warning("We can add %s builder since the build associated "
                            "is running. This is because it is a Buildbot job.")
                pass

            # We need to trigger the build job and the test job
            else:
                if objective not in build_builders:
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        # task_graph_id=task_graph_id,
                        properties={'upload_to_task_id': slugId()},
                    )
                    tasks.append(task)
                    taskId = task['taskId']
                else:
                    taskId = build_builders[objective]['taskId']

                # Add test job
                task = _create_task(
                    buildername=builder,
                    repo_name=repo_name,
                    revision=revision,
                    # task_graph_id=task_graph_id,
                    parent_task_id=taskId,
                )
                tasks.append(task)

    return tasks
def _generate_tc_tasks_from_builders(builders, repo_name, revision):
    """ Return TC tasks based on a list of builders.

    Input: a list of builders and a revision
    Output: list of TC tasks base on builders we receive

    :param builders: List of builder names
    :type builders: list
    :param repo_name: push revision
    :type repo_name: str
    :param revision: push revision
    :type revision: str
    :return: TC tasks
    :rtype: dict

    """
    tasks = []
    build_builders = {}

    # We need to determine what upstream jobs need to be triggered besides the
    # builders already on our list
    for builder in builders:
        if is_upstream(builder):
            task = _create_task(
                buildername=builder,
                repo_name=repo_name,
                revision=revision,
                # task_graph_id=task_graph_id,
                properties={'upload_to_task_id': slugId()},
            )
            tasks.append(task)

            # We want to keep track of how many build builders we have
            build_builders[builder] = task

    for builder in builders:
        if is_downstream(builder):
            # For test jobs, determine_trigger_objective()[0] can be 3 things:
            # - the build job, if no build job exists
            # - the test job, if the build job is already completed
            # - None, if the build job is running
            objective, package_url, tests_url = \
                determine_trigger_objective(revision, builder)

            # The build job is already completed, we can trigger the test job
            if objective == builder:
                if objective in build_builders:
                    LOG.warning(
                        "We're creating a new build even though there's "
                        "already an existing completed build we could have "
                        "used. We hope you wanted to do this.")
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        # task_graph_id=task_graph_id,
                        parent_task_id=build_builders[objective]['taskId'],
                        properties={'upload_to_task_id': slugId()},
                    )
                    tasks.append(task)
                else:
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        properties={
                            'packageUrl': package_url,
                            'testUrl': tests_url
                        },
                    )
                    tasks.append(task)

            # The build job is running, there is nothing we can do
            elif objective is None:
                LOG.warning(
                    "We can add %s builder since the build associated "
                    "is running. This is because it is a Buildbot job.")
                pass

            # We need to trigger the build job and the test job
            else:
                if objective not in build_builders:
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        # task_graph_id=task_graph_id,
                        properties={'upload_to_task_id': slugId()},
                    )
                    tasks.append(task)
                    taskId = task['taskId']
                else:
                    taskId = build_builders[objective]['taskId']

                # Add test job
                task = _create_task(
                    buildername=builder,
                    repo_name=repo_name,
                    revision=revision,
                    # task_graph_id=task_graph_id,
                    parent_task_id=taskId,
                )
                tasks.append(task)

    return tasks
def _generate_tc_tasks_from_builders(builders, repo_name, revision):
    """ Return TC tasks based on a list of builders.

    Input: a list of builders and a revision
    Output: list of TC tasks base on builders we receive

    :param builders: List of builder names
    :type builders: list
    :param repo_name: push revision
    :type repo_name: str
    :param revision: push revision
    :type revision: str
    :return: TC tasks
    :rtype: dict

    """
    tasks = []
    build_builders = {}

    # We need to determine what upstream jobs need to be triggered besides the
    # builders already on our list
    for builder in builders:
        if is_upstream(builder):
            task = _create_task(
                buildername=builder,
                repo_name=repo_name,
                revision=revision,
                # task_graph_id=task_graph_id,
                properties={"upload_to_task_id": slugId()},
            )
            tasks.append(task)

            # We want to keep track of how many build builders we have
            build_builders[builder] = task

    for builder in builders:
        if is_downstream(builder):
            # For test jobs, determine_trigger_objective()[0] can be 3 things:
            # - the build job, if no build job exists
            # - the test job, if the build job is already completed
            # - None, if the build job is running
            objective, package_url, tests_url = determine_trigger_objective(revision, builder)

            # The build job is already completed, we can trigger the test job
            if objective == builder:
                if objective in build_builders:
                    LOG.warning(
                        "We're creating a new build even though there's "
                        "already an existing completed build we could have "
                        "used. We hope you wanted to do this."
                    )
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        # task_graph_id=task_graph_id,
                        parent_task_id=build_builders[objective]["taskId"],
                        properties={"upload_to_task_id": slugId()},
                    )
                    tasks.append(task)
                else:
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        properties={"packageUrl": package_url, "testUrl": tests_url},
                    )
                    tasks.append(task)

            # The build job is running, there is nothing we can do
            elif objective is None:
                LOG.warning(
                    "We can add %s builder since the build associated "
                    "is running. This is because it is a Buildbot job."
                )
                pass

            # We need to trigger the build job and the test job
            else:
                if objective not in build_builders:
                    task = _create_task(
                        buildername=builder,
                        repo_name=repo_name,
                        revision=revision,
                        # task_graph_id=task_graph_id,
                        properties={"upload_to_task_id": slugId()},
                    )
                    tasks.append(task)
                    taskId = task["taskId"]
                else:
                    taskId = build_builders[objective]["taskId"]

                # Add test job
                task = _create_task(
                    buildername=builder,
                    repo_name=repo_name,
                    revision=revision,
                    # task_graph_id=task_graph_id,
                    parent_task_id=taskId,
                )
                tasks.append(task)

    return tasks