Bug 1624902 - [tryselect] Validate '--strategy' argument to ./mach try auto, r=marco

This ensures we fail with invalid module paths early. Otherwise users wouldn't
find out until the decision task fails.

Differential Revision: https://phabricator.services.mozilla.com/D68464

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Andrew Halberstadt 2020-03-31 17:57:42 +00:00
parent 9a971df100
commit 9d99e8d17f
2 changed files with 17 additions and 2 deletions

View File

@ -20,6 +20,8 @@ from textwrap import dedent
import mozpack.path as mozpath
from mozbuild.base import BuildEnvironmentNotFoundException, MozbuildObject
from taskgraph.util.python_path import find_object
from .tasks import resolve_tests_by_suite
here = os.path.abspath(os.path.dirname(__file__))
@ -296,6 +298,16 @@ class OptimizeStrategies(TryConfig):
if ':' not in strategy:
strategy = "taskgraph.optimize:experimental.{}".format(strategy)
try:
obj = find_object(strategy)
except (ImportError, AttributeError):
print("error: invalid module path '{}'".format(strategy))
sys.exit(1)
if not isinstance(obj, dict):
print("error: object at '{}' must be a dict".format(strategy))
sys.exit(1)
return {
'optimize-strategies': strategy,
}

View File

@ -42,8 +42,11 @@ TASK_CONFIG_TESTS = {
],
'strategy': [
([], None),
(['--strategy', 'foo'], {'optimize-strategies': 'taskgraph.optimize:experimental.foo'}),
(['--strategy', 'foo:bar'], {'optimize-strategies': 'foo:bar'}),
(['--strategy', 'seta'], {'optimize-strategies': 'taskgraph.optimize:experimental.seta'}),
(['--strategy', 'taskgraph.optimize:experimental.seta'], {'optimize-strategies': 'taskgraph.optimize:experimental.seta'}), # noqa
(['--strategy', 'taskgraph.optimize:experimental'], SystemExit),
(['--strategy', 'foo'], SystemExit),
(['--strategy', 'foo:bar'], SystemExit),
],
'worker-overrides': [
([], None),