kdelibs/threadweaver/Scripts/buildinator_build_status.py
2014-11-13 01:04:59 +02:00

86 lines
3.7 KiB
Python

# a class that holds the build status (aka results of a build run), an object
# of this class represents a record in the build status database later:
class BuildStatus (dict):
"""BuildStatus collects information about a build+test run"""
def __init__ (self, Status= None):
""" Construct an objct, possibly copying it"""
if Status is not None:
self.svnUrl = Status.svnUrl
self.projectFile = Status.projectFile
self.revision = Status.revision
self.platform = Status.platform
self.options = Status.options
self.prefix = Status.prefix
self.checkoutStatus = Status.checkoutStatus
self.configureStatus = Status.configureStatus
self.compileStatus = Status.compileStatus
self.overallTestStatus = Status.overallTestStatus
self.committer = Status.committer
self.numberOfTestRuns = Status.numberOfTestRuns
self.testResults = Status.testResults
def dumpBuildStatus( self ):
CheckoutStatusText = ( 'not performed', 'success', 'failure' )
ConfigureStatusText = ( 'not performed', 'success', 'failure' )
CompileStatusText = ( 'not performed', 'success', 'success (warnings)', 'failure' )
InitialTestStatusText = ( 'not performed', 'success', 'tests failed', 'test crashed', 'tests timed out' )
TestsGood = 0
for Run in self.testResults:
if Run == 1: # success
TestsGood += 1
TestsTotal = len(self.testResults)
TestsBad = TestsTotal - TestsGood
TestResultsString = '[' + str(TestsGood) + '/' + str(TestsBad) + '/' + str(TestsTotal) + ']'
"""Print the build status to the console tersely"""
print 'build result for revision ' + str(self.revision) + ', committed by ' + self.committer + ':'
print '--> build platform: ' + self.platform
print '--> Subversion URL: ' + self.svnUrl
print '--> configuration: "' + self.prefix + '", configured with options "' + self.options + '"'
print '--> checkout status: ' + CheckoutStatusText[self.checkoutStatus]
print '--> configure status: ' + ConfigureStatusText[self.configureStatus]
print '--> compile status: ' + CompileStatusText[self.compileStatus]
print '--> overall test status: ' + InitialTestStatusText[self.overallTestStatus] + ' ' + TestResultsString
def hasErrors( self ):
"""Returns whether errors occured during the build process"""
if self.checkoutStatus == 2 or self.configureStatus == 2 or self.compileStatus == 3 \
or self.overallTestStatus != 1:
return True
else:
return False
# the svn URL this is working on:
svnUrl = ''
# the project file to use for creating makefiles
# FIXME: this may need to be subclassed for different makefile generators
projectFile = ''
# the revision that was build in this run:
revision = 0
# the platform that this was built on:
platform = ''
# the build options used:
options = ''
# the prefix (usually Debug or Release):
prefix = ''
# check-out status (0 = not performed, 1 = success, 2 = failed)
checkoutStatus = 0
# configure status (0 = not performed, 1 = success, 2 = failed)
configureStatus = 0
# compilestatus (0 = not performed, 1 = success, 2 = success with warnings, 3 = failed)
compileStatus = 0
# first test run status ( 0 = not performed, 1 = success, 2 = test failed, 3 = crash, 4 = timeout)
overallTestStatus = 0
# number of times the tests are supposed to be run:
numberOfTestRuns = 1
# list of test run results:
testResults = []
# committer of the revision
committer = ''