blob: 7f15494f7683e65ac01b8ba00e5b5e1c87e90d71 [file]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""This module is to save structured objects which can serve as:
* pipeline inputs and outputs
* Parameters for service functions."""
from dto.dict_of_basestring import DictOfBasestring
from libs.list_of_basestring import ListOfBasestring
from libs.structured_object import StructuredObject
from libs.structured_object import TypedDict
from libs.structured_object import TypedList
# TODO(crbug.com/821623): Refactor into dto's.
class BuildKey(StructuredObject):
"""Key to a build, an analysis or a try job."""
# Use basestring to make the attribute to accept value of both type
# str and unicode.
master_name = basestring
builder_name = basestring
build_number = int
def GetParts(self):
return self.master_name, self.builder_name, self.build_number
class BaseCL(StructuredObject):
repo_name = basestring
revision = basestring
commit_position = int
url = basestring
class CreateRevertCLParameters(StructuredObject):
"""Input for CreateRevertCLPipeline."""
cl_key = basestring
build_id = basestring
failure_type = int
class SubmitRevertCLParameters(StructuredObject):
"""Input for SubmitRevertCLPipeline."""
cl_key = basestring
revert_status = int
failure_type = int
class SendNotificationToIrcParameters(StructuredObject):
"""Input for SendNotificationToIrcPipeline."""
cl_key = basestring
revert_status = int
commit_status = int
failure_type = int
class SendNotificationForCulpritParameters(StructuredObject):
cl_key = basestring
force_notify = bool
revert_status = int
failure_type = int
class CulpritActionParameters(StructuredObject):
"""Input for RevertAndNotifyCompileCulpritPipeline and
RevertAndNotifyTestCulpritPipeline."""
build_key = BuildKey
culprits = DictOfBasestring
heuristic_cls = ListOfBasestring
class RunTryJobParameters(StructuredObject):
"""Shared parameters of RunCompileTryJobPipeline and
ScheduleTestTryJobPipeline."""
build_key = BuildKey
good_revision = basestring
bad_revision = basestring
suspected_revisions = list
cache_name = basestring
dimensions = list
urlsafe_try_job_key = basestring
class RunCompileTryJobParameters(RunTryJobParameters):
"""Input for RunTryJobParameters."""
compile_targets = list
class RunTestTryJobParameters(RunTryJobParameters):
"""Input for ScheduleTestTryJobPipeline."""
targeted_tests = dict
class TryJobReport(StructuredObject):
"""Common info in reports of waterfall and flake try jobs."""
last_checked_out_revision = basestring
previously_checked_out_revision = basestring
previously_cached_revision = basestring
metadata = dict
class CompileTryJobReport(TryJobReport):
"""Special information in report of compile try jobs."""
culprit = basestring
result = dict
class TryJobResult(StructuredObject):
"""Object represents a try job results saved in wf_try_job entity."""
# TODO(crbug.com/796646): Convert url to
# master/builder/build_number/buildbucket_build_id record.
url = basestring
try_job_id = basestring
culprit = dict
class CompileTryJobResult(TryJobResult):
"""Object represents a compile try job results saved in wf_try_job entity."""
report = CompileTryJobReport
class PassFailCount(StructuredObject):
pass_count = int
fail_count = int
class PassFailCounts(TypedDict):
_value_type = PassFailCount
class TestTryJobStepResult(StructuredObject):
status = basestring
valid = bool
step_metadata = dict
pass_fail_counts = PassFailCounts
failures = list
class TestTryJobAllStepsResult(TypedDict):
_value_type = TestTryJobStepResult
class TestTryJobAllRevisionsResult(TypedDict):
_value_type = TestTryJobAllStepsResult
class TestTryJobReport(TryJobReport):
culprits = dict
flakes = dict
result = TestTryJobAllRevisionsResult
class TestTryJobResult(TryJobResult):
"""Object represents a test try job results saved in wf_try_job entity."""
report = TestTryJobReport
class IdentifyCompileTryJobCulpritParameters(StructuredObject):
build_key = BuildKey
result = CompileTryJobResult
class IdentifyTestTryJobCulpritParameters(StructuredObject):
build_key = BuildKey
result = TestTryJobResult
class RunFlakeTryJobParameters(StructuredObject):
"""Input for RunFlakeTryJobPipeline to compile and isolate only."""
analysis_urlsafe_key = basestring
revision = basestring
flake_cache_name = basestring
dimensions = list
# Structured objects related to failure info.
class FailureInfoBuild(StructuredObject):
blame_list = list
chromium_revision = basestring
class FailureInfoBuilds(TypedDict):
_value_type = FailureInfoBuild
class BaseFailureInfo(StructuredObject):
master_name = basestring
builder_name = basestring
build_number = int
parent_mastername = basestring
parent_buildername = basestring
builds = FailureInfoBuilds
failure_type = int
failed = bool
chromium_revision = basestring
is_luci = bool
buildbucket_bucket = basestring
buildbucket_id = basestring
class BaseSubFailure(StructuredObject):
last_pass = int
current_failure = int
first_failure = int
class BaseFailedStep(BaseSubFailure):
supported = bool
class BaseFailedSteps(TypedDict):
_value_type = BaseFailedStep
# Structured objects related to compile failure info.
class CompileFailureInfo(BaseFailureInfo):
failed_steps = BaseFailedSteps
class CompileHeuristicAnalysisParameters(StructuredObject):
failure_info = CompileFailureInfo
build_completed = bool
# Structured objects related to test failure info.
class FailedTest(BaseSubFailure):
base_test_name = basestring
class FailedTests(TypedDict):
_value_type = FailedTest
class IsolatedData(StructuredObject):
isolatedserver = basestring
namespace = basestring
digest = basestring
class IsolatedDataList(TypedList):
_element_type = IsolatedData
class TestFailedStep(BaseFailedStep):
tests = FailedTests
list_isolated_data = IsolatedDataList
class TestFailedSteps(TypedDict):
_value_type = TestFailedStep
class TestFailureInfo(BaseFailureInfo):
failed_steps = TestFailedSteps
class TestHeuristicAnalysisParameters(StructuredObject):
failure_info = TestFailureInfo
build_completed = bool
# Structured objects related to failure signals.
class BaseFailureSignal(StructuredObject):
files = dict
keywords = dict
class FailedEdge(StructuredObject):
dependencies = list
output_nodes = list
rule = basestring
class FailedEdges(TypedList):
_element_type = FailedEdge
class FailedTarget(StructuredObject):
source = basestring
target = basestring
class FailedTargets(TypedList):
_element_type = FailedTarget
# Structured objects related to compile failure signals.
class CompileFailureSignal(BaseFailureSignal):
failed_edges = FailedEdges
failed_targets = FailedTargets
failed_output_nodes = list
class CompileFailureSignals(TypedDict):
_value_type = CompileFailureSignal
# Structured objects related to test failure signals.
class TestFailureSignalsForOneStep(TypedDict):
_value_type = BaseFailureSignal
class TestFailureSignal(BaseFailureSignal):
tests = TestFailureSignalsForOneStep
class TestFailureSignals(TypedDict):
_value_type = TestFailureSignal
# Structured objects related to heuristic result.
class SuspectedCL(BaseCL):
hints = dict
score = int
build_number = int
class SuspectedCLs(TypedList):
_element_type = SuspectedCL
class HeuristicResultSubFailure(StructuredObject):
suspected_cls = SuspectedCLs
first_failure = int
last_pass = int
class HeuristicResultFailure(HeuristicResultSubFailure):
supported = bool
step_name = basestring
# Structured objects related to heuristic result for compile failures.
class CompileHeuristicResultFailure(HeuristicResultFailure):
new_compile_suspected_cls = SuspectedCLs
use_ninja_dependencies = bool
class CompileHeuristicResultFailures(TypedList):
_element_type = CompileHeuristicResultFailure
class CompileHeuristicResult(TypedDict):
_value_type = CompileHeuristicResultFailures
class CompileHeuristicAnalysisOutput(StructuredObject):
failure_info = CompileFailureInfo
signals = CompileFailureSignals
heuristic_result = CompileHeuristicResult
class TestHeuristicResultForOneTest(HeuristicResultSubFailure):
test_name = basestring
# Structured objects related to heuristic result for test failures.
class TestHeuristicResultFailureTestsInOneStep(TypedList):
_element_type = TestHeuristicResultForOneTest
class TestHeuristicResultFailure(HeuristicResultFailure):
tests = TestHeuristicResultFailureTestsInOneStep
class TestHeuristicResultFailures(TypedList):
_element_type = TestHeuristicResultFailure
class TestHeuristicResult(TypedDict):
_value_type = TestHeuristicResultFailures
class TestHeuristicAnalysisOutput(StructuredObject):
failure_info = TestFailureInfo
heuristic_result = TestHeuristicResult