Source code
Revision control
Copy as Markdown
Other Tools
# 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
"""
Apply some defaults and minor modifications to the jobs defined in the
APK and AAB signing kinds.
"""
from taskgraph.transforms.base import TransformSequence
from taskgraph.util.schema import resolve_keyed_by
transforms = TransformSequence()
PRODUCTION_SIGNING_BUILD_TYPES = [
"focus-nightly",
"focus-beta",
"focus-release",
"klar-release",
"fenix-nightly",
"fenix-beta",
"fenix-release",
"fenix-beta-mozillaonline",
"fenix-release-mozillaonline",
]
@transforms.add
def resolve_keys(config, tasks):
for task in tasks:
for key in (
"index",
"signing-format",
"notify",
"treeherder.platform",
):
resolve_keyed_by(
task,
key,
item_name=task["name"],
**{
"build-type": task["attributes"]["build-type"],
"level": config.params["level"],
},
)
yield task
@transforms.add
def set_worker_type(config, tasks):
for task in tasks:
worker_type = "linux-depsigning"
if (
str(config.params["level"]) == "3"
and task["attributes"]["build-type"] in PRODUCTION_SIGNING_BUILD_TYPES
):
worker_type = "linux-signing"
task["worker-type"] = worker_type
yield task
@transforms.add
def add_signing_cert_scope(config, tasks):
scope_prefix = config.graph_config["scriptworker"]["scope-prefix"]
for task in tasks:
cert = "dep-signing"
if str(config.params["level"]) == "3":
if task["attributes"]["build-type"] in ("fenix-beta", "fenix-release"):
cert = "fennec-production-signing"
elif task["attributes"]["build-type"] in PRODUCTION_SIGNING_BUILD_TYPES:
cert = "production-signing"
task.setdefault("scopes", []).append(f"{scope_prefix}:signing:cert:{cert}")
yield task
@transforms.add
def set_index_job_name(config, tasks):
for task in tasks:
if task.get("index"):
task["index"]["job-name"] = task["attributes"]["build-type"]
yield task
@transforms.add
def set_signing_attributes(config, tasks):
for task in tasks:
task["attributes"]["signed"] = True
yield task
@transforms.add
def set_signing_format(config, tasks):
for task in tasks:
signing_format = task.pop("signing-format")
for upstream_artifact in task["worker"]["upstream-artifacts"]:
upstream_artifact["formats"] = [signing_format]
yield task
@transforms.add
def format_email(config, tasks):
version = config.params["version"]
for task in tasks:
if "notify" in task:
email = task["notify"].get("email")
if email:
email["subject"] = email["subject"].format(version=version)
email["content"] = email["content"].format(version=version)
yield task