Bug 1748929 - [gecko_taskgraph] Use 'VerificationSequence' from upstream taskgraph, r=releng-reviewers,jcristau

Differential Revision: https://phabricator.services.mozilla.com/D144623
This commit is contained in:
Andrew Halberstadt 2022-04-26 13:17:49 +00:00
parent a4e3dd8c6a
commit 3780835b2f

View file

@ -7,17 +7,15 @@ import logging
import re
import os
import sys
from abc import ABC, abstractmethod
import attr
from taskgraph.parameters import Parameters
from taskgraph.taskgraph import TaskGraph
from taskgraph.util.verify import (
VerificationSequence,
)
from gecko_taskgraph import GECKO
from gecko_taskgraph.config import GraphConfig
from gecko_taskgraph.util.attributes import (
match_run_on_projects,
RELEASE_PROJECTS,
ALL_PROJECTS,
RUN_ON_PROJECT_ALIASES,
@ -28,101 +26,6 @@ logger = logging.getLogger(__name__)
doc_base_path = os.path.join(GECKO, "taskcluster", "docs")
@attr.s(frozen=True)
class Verification(ABC):
func = attr.ib()
@abstractmethod
def verify(self, **kwargs) -> None:
pass
@attr.s(frozen=True)
class InitialVerification(Verification):
"""Verification that doesn't depend on any generation state."""
def verify(self):
self.func()
@attr.s(frozen=True)
class GraphVerification(Verification):
"""Verification for a TaskGraph object."""
run_on_projects = attr.ib(default=None)
def verify(
self, graph: TaskGraph, graph_config: GraphConfig, parameters: Parameters
):
if self.run_on_projects and not match_run_on_projects(
parameters["project"], self.run_on_projects
):
return
scratch_pad = {}
graph.for_each_task(
self.func,
scratch_pad=scratch_pad,
graph_config=graph_config,
parameters=parameters,
)
self.func(
None,
graph,
scratch_pad=scratch_pad,
graph_config=graph_config,
parameters=parameters,
)
@attr.s(frozen=True)
class ParametersVerification(Verification):
"""Verification for a set of parameters."""
def verify(self, parameters: Parameters):
self.func(parameters)
@attr.s(frozen=True)
class KindsVerification(Verification):
"""Verification for kinds."""
def verify(self, kinds: dict):
self.func(kinds)
@attr.s(frozen=True)
class VerificationSequence:
"""
Container for a sequence of verifications over a TaskGraph. Each
verification is represented as a callable taking (task, taskgraph,
scratch_pad), called for each task in the taskgraph, and one more
time with no task but with the taskgraph and the same scratch_pad
that was passed for each task.
"""
_verifications = attr.ib(factory=dict)
_verification_types = {
"graph": GraphVerification,
"initial": InitialVerification,
"kinds": KindsVerification,
"parameters": ParametersVerification,
}
def __call__(self, name, *args, **kwargs):
for verification in self._verifications.get(name, []):
verification.verify(*args, **kwargs)
def add(self, name, **kwargs):
cls = self._verification_types.get(name, GraphVerification)
def wrap(func):
self._verifications.setdefault(name, []).append(cls(func, **kwargs))
return func
return wrap
verifications = VerificationSequence()