Files
sousa-gecko/taskcluster/gecko_taskgraph/transforms/release_deps.py
T
Ben Hearsum 19dbd74e29 Bug 2038731: remove required_signoffs/signoff_urls r=taskgraph-reviewers,releng-reviewers,ahal
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
2026-05-11 22:00:23 +00:00

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