79 lines
2.4 KiB
Python
79 lines
2.4 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/.
|
|
|
|
from taskgraph.transforms.base import TransformSequence
|
|
|
|
_CHANNEL_ABBREV = {
|
|
"release": "rel",
|
|
"beta": "beta",
|
|
"devedition": "deved",
|
|
"nightly": "nightly",
|
|
}
|
|
|
|
_METHOD_GROUP = {
|
|
"apt": "inst-apt",
|
|
"rpm": "inst-rpm",
|
|
"flatpak": "inst-flatpak",
|
|
"tarball": "inst-tarball",
|
|
"snap": "inst-snap",
|
|
}
|
|
|
|
transforms = TransformSequence()
|
|
|
|
|
|
def _get_channel_abbrev(channel):
|
|
abbrev = _CHANNEL_ABBREV.get(channel)
|
|
if abbrev is None:
|
|
raise ValueError(f"Unknown channel {channel!r}: add it to _CHANNEL_ABBREV")
|
|
return abbrev
|
|
|
|
|
|
def _get_arch_abbrev(platform):
|
|
return "a64" if "aarch64" in platform else "x64"
|
|
|
|
|
|
def _get_method_group(install_method):
|
|
group = _METHOD_GROUP.get(install_method)
|
|
if group is None:
|
|
raise ValueError(
|
|
f"Unknown install method {install_method!r}: add it to _METHOD_GROUP"
|
|
)
|
|
return group
|
|
|
|
|
|
def _extract_matrix_values(task):
|
|
# taskgraph.transforms.matrix stores resolved values at
|
|
# task["attributes"]["matrix"] after expansion (see matrix.py:_resolve_matrix).
|
|
label = task.get("label", task.get("name", "?"))
|
|
matrix = task.get("attributes", {}).get("matrix", {})
|
|
channel = matrix.get("channel")
|
|
if channel is None:
|
|
raise ValueError(f"Task '{label}' has distro-symbol but no matrix channel")
|
|
locale = matrix.get("locale")
|
|
if locale is None:
|
|
raise ValueError(f"Task '{label}' has distro-symbol but no matrix locale")
|
|
return channel, locale
|
|
|
|
|
|
@transforms.add
|
|
def set_treeherder_symbol(config, tasks):
|
|
for task in tasks:
|
|
attrs = task.get("attributes", {})
|
|
distro_symbol = attrs.pop("distro-symbol", None)
|
|
install_method = attrs.pop("install-method", None)
|
|
if distro_symbol is None:
|
|
yield task
|
|
continue
|
|
|
|
channel, locale = _extract_matrix_values(task)
|
|
channel_abbrev = _get_channel_abbrev(channel)
|
|
locale_abbrev = locale.split("-")[0]
|
|
arch_abbrev = _get_arch_abbrev(task.get("treeherder", {}).get("platform", ""))
|
|
method_group = _get_method_group(install_method)
|
|
|
|
task.setdefault("treeherder", {})["symbol"] = (
|
|
f"{method_group}({distro_symbol}-{arch_abbrev}-{channel_abbrev}-{locale_abbrev})"
|
|
)
|
|
yield task
|