blob: 72c9b31078f3a1abd1a58850daaea7394b543637 [file] [log] [blame]
"""
Configuration information for the CI infrastructure, for use by the dashboard.
"""
from llvmlab import util
class Phase(util.simple_repr_mixin):
"""
A Phase object represents a single phase of the CI process, which is
essentially a name for a group of builders which get reported in aggregate.
"""
@staticmethod
def fromdata(data):
version = data['version']
if version != 0:
raise ValueError, "Unknown version"
return Phase(data['name'], data['number'],
data['phase_builder'], data['builder_names'],
data['description'])
def todata(self):
return { 'version' : 0,
'name' : self.name,
'number' : self.number,
'phase_builder' : self.phase_builder,
'builder_names' : self.builder_names,
'description' : self.description}
def __init__(self, name, number, phase_builder, builder_names, description):
self.name = name
self.number = number
self.phase_builder = phase_builder
self.builder_names = builder_names
self.description = description
class Builder(util.simple_repr_mixin):
"""
A Builder object stores information for an individual builder which
participates in some phase.
"""
@staticmethod
def fromdata(data):
version = data['version']
if version != 0:
raise ValueError, "Unknown version"
return Builder(data['name'])
def todata(self):
return { 'version' : 0,
'name' : self.name }
def __init__(self, name):
self.name = name
class PublishedBuild(util.simple_repr_mixin):
"""
A PublishedBuild records what artifacts we publicize on the primary
dashboard home page.
"""
@staticmethod
def fromdata(data):
version = data['version']
if version != 0:
raise ValueError, "Unknown version"
return PublishedBuild(data['product'], data['os'],
data['arch'], data['archive_name'])
def todata(self):
return { 'version' : 0,
'product' : self.product,
'os' : self.os,
'arch' : self.arch,
'archive_name' : self.archive_name }
def __init__(self, product, os, arch, archive_name):
self.product = product
self.os = os
self.arch = arch
self.archive_name = archive_name
class Config(util.simple_repr_mixin):
"""
The Config object holds the current representation of the lab CI
organization.
"""
# FIXME: How much do we care about dealing with having the dashboard react
# to changes in the CIConfig? Might get messy...
@staticmethod
def fromdata(data):
version = data['version']
if version != 0:
raise ValueError, "Unknown version"
return Config([Phases.fromdata(item)
for item in data['phases']],
[Builder.fromdata(item)
for item in data['builders']],
[PublishedBuild.fromdata(item)
for item in data['published_builds']])
def todata(self):
return { 'version' : 0,
'phases' : [item.todata()
for item in self.phases],
'builders' : [item.todata()
for item in self.builders],
'published_builds' : [item.todata()
for item in self.published_builds] }
def __init__(self, phases, builders, published_builds, validation_builder):
self.phases = phases
self.builders = builders
self.published_builds = published_builds
self.validation_builder = validation_builder