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
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