These were added in support of https://bugzilla.mozilla.org/show_bug.cgi?id=1471202. While the goal of that bug may still be something we want to achieve, we have never done anything with these, and it's likely that if we were to proceed with that work, we'd need a different implementation. Additionally, the [verification we have for these](https://searchfox.org/firefox-main/rev/1372522d3de2c9aeedc8020ec8d81326f1a9516e/taskcluster/gecko_taskgraph/util/verify.py#275-301) requires us to set these in various places even though we don't use them, which is annoying and confusing. Differential Revision: https://phabricator.services.mozilla.com/D299774
65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
"""
|
|
Add dependencies to release tasks.
|
|
"""
|
|
|
|
from taskgraph.transforms.base import TransformSequence
|
|
|
|
PHASES = ["build", "promote", "push", "ship"]
|
|
|
|
transforms = TransformSequence()
|
|
|
|
|
|
@transforms.add
|
|
def add_dependencies(config, jobs):
|
|
for job in jobs:
|
|
dependencies = {}
|
|
# Add any kind_dependencies_tasks with matching product as dependencies
|
|
product = job.get("shipping-product")
|
|
phase = job.get("shipping-phase")
|
|
if product is None:
|
|
continue
|
|
|
|
for dep_task in config.kind_dependencies_tasks.values():
|
|
# Weed out unwanted tasks.
|
|
# XXX we have run-on-projects which specifies the on-push behavior;
|
|
# we need another attribute that specifies release promotion,
|
|
# possibly which action(s) each task belongs in.
|
|
|
|
# We can only depend on tasks in the current or previous phases
|
|
dep_phase = dep_task.attributes.get("shipping_phase")
|
|
if dep_phase and PHASES.index(dep_phase) > PHASES.index(phase):
|
|
continue
|
|
|
|
if dep_task.attributes.get("build_platform") and job.get(
|
|
"attributes", {}
|
|
).get("build_platform"):
|
|
if (
|
|
dep_task.attributes["build_platform"]
|
|
!= job["attributes"]["build_platform"]
|
|
):
|
|
continue
|
|
|
|
# TODO get rid of the release-type match
|
|
if product == "firefox-android":
|
|
# exclude beta tasks from release graph and vice versa
|
|
from android_taskgraph.release_type import does_task_match_release_type
|
|
|
|
if not does_task_match_release_type(
|
|
dep_task, config.params["release_type"]
|
|
):
|
|
continue
|
|
|
|
# Add matching product tasks to deps
|
|
if (
|
|
dep_task.task.get("shipping-product") == product
|
|
or dep_task.attributes.get("shipping_product") == product
|
|
):
|
|
dependencies[dep_task.label] = dep_task.label
|
|
|
|
job.setdefault("dependencies", {}).update(dependencies)
|
|
|
|
yield job
|