1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# 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.util.python_path import find_object
from ..cli import BaseTryParser
from ..push import push_to_try
TRY_AUTO_PARAMETERS = {
"optimize_strategies": "gecko_taskgraph.optimize:tryselect.bugbug_reduced_manifests_config_selection_medium", # noqa
"optimize_target_tasks": True,
"target_tasks_method": "try_auto",
"test_manifest_loader": "bugbug",
"try_mode": "try_auto",
"try_task_config": {},
}
class AutoParser(BaseTryParser):
name = "auto"
common_groups = ["push"]
task_configs = [
"artifact",
"env",
"chemspill-prio",
"disable-pgo",
"worker-overrides",
]
arguments = [
[
["--strategy"],
{
"default": None,
"help": "Override the default optimization strategy. Valid values "
"are the experimental strategies defined at the bottom of "
"`taskcluster/gecko_taskgraph/optimize/__init__.py`.",
},
],
[
["--tasks-regex"],
{
"default": [],
"action": "append",
"help": "Apply a regex filter to the tasks selected. Specifying "
"multiple times schedules the union of computed tasks.",
},
],
[
["--tasks-regex-exclude"],
{
"default": [],
"action": "append",
"help": "Apply a regex filter to the tasks selected. Specifying "
"multiple times excludes computed tasks matching any regex.",
},
],
]
def validate(self, args):
super().validate(args)
if args.strategy:
if ":" not in args.strategy:
args.strategy = "gecko_taskgraph.optimize:tryselect.{}".format(
args.strategy
)
try:
obj = find_object(args.strategy)
except (ImportError, AttributeError):
self.error("invalid module path '{}'".format(args.strategy))
if not isinstance(obj, dict):
self.error("object at '{}' must be a dict".format(args.strategy))
def run(
message="{msg}",
stage_changes=False,
dry_run=False,
closed_tree=False,
strategy=None,
tasks_regex=None,
tasks_regex_exclude=None,
try_config=None,
**ignored
):
msg = message.format(msg="Tasks automatically selected.")
params = TRY_AUTO_PARAMETERS.copy()
if try_config:
params["try_task_config"] = try_config
if strategy:
params["optimize_strategies"] = strategy
if tasks_regex or tasks_regex_exclude:
params.setdefault("try_task_config", {})["tasks-regex"] = {}
params["try_task_config"]["tasks-regex"]["include"] = tasks_regex
params["try_task_config"]["tasks-regex"]["exclude"] = tasks_regex_exclude
task_config = {
"version": 2,
"parameters": params,
}
return push_to_try(
"auto",
msg,
try_task_config=task_config,
stage_changes=stage_changes,
dry_run=dry_run,
closed_tree=closed_tree,
)
|