From 4ecf2fd581d2a42d753b89117c85c2421741b2ff Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Thu, 31 Jul 2025 12:50:47 -0400 Subject: [PATCH] feat: add a commandline flag to disable verifications Bug: 1980436 --- .../src/pytest_taskgraph/fixtures/gen.py | 7 +++++-- src/taskgraph/decision.py | 1 + src/taskgraph/generator.py | 14 +++++++++----- src/taskgraph/main.py | 7 +++++++ test/test_generator.py | 12 ++++++++++++ 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py b/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py index 038a5ca22..bce6896a8 100644 --- a/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +++ b/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py @@ -166,7 +166,8 @@ def parameters(): @pytest.fixture def maketgg(monkeypatch, parameters): - def inner(target_tasks=None, kinds=[("_fake", [])], params=None): + def inner(target_tasks=None, kinds=None, params=None, enable_verifications=True): + kinds = kinds or [("_fake", [])] params = params or {} FakeKind.loaded_kinds = [] target_tasks = target_tasks or [] @@ -186,7 +187,9 @@ def target_tasks_method(full_task_graph, parameters, graph_config): monkeypatch.setattr(generator, "load_graph_config", fake_load_graph_config) - return WithFakeKind("/root", parameters) + return WithFakeKind( + "/root", parameters, enable_verifications=enable_verifications + ) return inner diff --git a/src/taskgraph/decision.py b/src/taskgraph/decision.py index f0901c209..361619221 100644 --- a/src/taskgraph/decision.py +++ b/src/taskgraph/decision.py @@ -110,6 +110,7 @@ def taskgraph_decision(options, parameters=None): parameters=parameters, decision_task_id=decision_task_id, write_artifacts=True, + enable_verifications=options.get("verify", True), ) # write out the parameters used to generate this graph diff --git a/src/taskgraph/generator.py b/src/taskgraph/generator.py index d14495f09..36491bba7 100644 --- a/src/taskgraph/generator.py +++ b/src/taskgraph/generator.py @@ -123,6 +123,7 @@ def __init__( parameters: Union[Parameters, Callable[[GraphConfig], Parameters]], decision_task_id: str = "DECISION-TASK", write_artifacts: bool = False, + enable_verifications: bool = True, ): """ @param root_dir: root directory containing the Taskgraph config.yml file @@ -136,6 +137,7 @@ def __init__( self._parameters = parameters self._decision_task_id = decision_task_id self._write_artifacts = write_artifacts + self._enable_verifications = enable_verifications # start the generator self._run = self._run() # type: ignore @@ -258,7 +260,7 @@ def _run(self): graph_config.register() # Initial verifications that don't depend on any generation state. - verifications("initial") + self.verify("initial") if callable(self._parameters): parameters = self._parameters(graph_config) @@ -289,7 +291,7 @@ def _run(self): kinds = { kind.name: kind for kind in self._load_kinds(graph_config, target_kinds) } - verifications("kinds", kinds) + self.verify("kinds", kinds) edges = set() for kind in kinds.values(): @@ -437,9 +439,11 @@ def _run_until(self, name): self._run_results[k] = v return self._run_results[name] - def verify(self, name, obj, *args, **kwargs): - verifications(name, obj, *args, **kwargs) - return name, obj + def verify(self, name, *args, **kwargs): + if self._enable_verifications: + verifications(name, *args, **kwargs) + if args: + return name, args[0] def load_tasks_for_kind(parameters, kind, root_dir=None): diff --git a/src/taskgraph/main.py b/src/taskgraph/main.py index e017c8148..521e5e13e 100644 --- a/src/taskgraph/main.py +++ b/src/taskgraph/main.py @@ -740,6 +740,13 @@ def load_task(args): "--tasks-for", required=True, help="the tasks_for value used to generate this task" ) @argument("--try-task-config-file", help="path to try task configuration file") +@argument( + "--no-verify", + dest="verify", + default=True, + action="store_false", + help="Skip graph verifications", +) @argument( "--verbose", "-v", action="store_true", help="include debug-level logging output" ) diff --git a/test/test_generator.py b/test/test_generator.py index 50df38fe2..d37ca22ed 100644 --- a/test/test_generator.py +++ b/test/test_generator.py @@ -160,6 +160,18 @@ def test_optimized_task_graph(maketgg): ) +def test_verifications(mocker, maketgg): + m = mocker.patch.object(generator, "verifications") + tgg = maketgg(["_fake-t-2"], enable_verifications=True) + tgg.morphed_task_graph + assert m.call_count == 9 + + m = mocker.patch.object(generator, "verifications") + tgg = maketgg(["_fake-t-2"], enable_verifications=False) + tgg.morphed_task_graph + m.assert_not_called() + + def test_load_tasks_for_kind(monkeypatch): """ `load_tasks_for_kinds` will load the tasks for the provided kind