92 lines
2.9 KiB
Python
92 lines
2.9 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.target_tasks import register_target_task, target_tasks_default
|
|
|
|
|
|
def filter_build_type(build_types, task):
|
|
if "o" in build_types and "opt" in task.attributes["build_type"]:
|
|
return True
|
|
if "d" in build_types and "debug" in task.attributes["build_type"]:
|
|
return True
|
|
|
|
|
|
PLATFORM_ALIASES = {
|
|
"aarch64-make": "aarch64",
|
|
"linux": "linux32",
|
|
"linux-fuzz": "linux32",
|
|
"linux64-fips": "linux64",
|
|
"linux64-fuzz": "linux64",
|
|
"linux64-make": "linux64",
|
|
"linux-make": "linux32",
|
|
"win64-make": "windows2022-64",
|
|
"win-make": "windows2022-32",
|
|
"win64": "windows2022-64",
|
|
"win": "windows2022-32",
|
|
"mac": "macosx64",
|
|
}
|
|
|
|
|
|
def filter_platform(platform, task):
|
|
if "build_platform" not in task.attributes:
|
|
return False
|
|
if platform == "all":
|
|
return True
|
|
task_platform = task.attributes["build_platform"]
|
|
# Check the platform name.
|
|
keep = task_platform == PLATFORM_ALIASES.get(platform, platform)
|
|
# Additional checks.
|
|
if platform == "linux64-fips":
|
|
keep &= task.attributes["fips"]
|
|
elif (
|
|
platform == "linux64-make"
|
|
or platform == "linux-make"
|
|
or platform == "win64-make"
|
|
or platform == "win-make"
|
|
or platform == "aarch64-make"
|
|
):
|
|
keep &= task.attributes["make"]
|
|
elif platform == "linux64-fuzz" or platform == "linux-fuzz":
|
|
keep &= task.attributes["fuzz"]
|
|
return keep
|
|
|
|
|
|
def filter_try_syntax(options, task):
|
|
symbol = task.task["extra"]["treeherder"]["symbol"].lower()
|
|
group = task.task["extra"]["treeherder"].get("groupSymbol", "").lower()
|
|
|
|
# Filter tools. We can immediately return here as those
|
|
# are not affected by platform or build type selectors.
|
|
if task.kind == "tools":
|
|
return any(t in options["tools"] for t in ["all", symbol])
|
|
|
|
# Filter unit tests.
|
|
if task.kind == "test":
|
|
tests = {"all", symbol}
|
|
if group in ("cipher", "ssl"):
|
|
tests.add(group)
|
|
if not any(t in options["unittests"] for t in tests):
|
|
return False
|
|
|
|
# Filter extra builds.
|
|
if group == "builds" and not options["extra"]:
|
|
return False
|
|
|
|
# Filter by platform.
|
|
if not any(filter_platform(platform, task) for platform in options["platforms"]):
|
|
return False
|
|
|
|
# Finally, filter by build type.
|
|
return filter_build_type(options["builds"], task)
|
|
|
|
|
|
@register_target_task("nss_try_tasks")
|
|
def target_tasks_try(full_task_graph, parameters, graph_config):
|
|
if not parameters["try_options"]:
|
|
return target_tasks_default(full_task_graph, parameters, graph_config)
|
|
return [
|
|
t.label
|
|
for t in full_task_graph
|
|
if filter_try_syntax(parameters["try_options"], t)
|
|
]
|