WebKitTools:
[WebKit-https.git] / WebKitTools / BuildSlaveSupport / build.webkit.org-config / webkit / steps.py
1 from webkit.basesteps import ShellCommand, SVN, Test, Compile, UploadCommand
2 from buildbot.status.builder import SUCCESS, FAILURE, WARNINGS
3
4 class CheckOutSource(SVN):
5     svnurl = "svn://anoncvs.opensource.apple.com/svn/webkit/trunk"
6     mode = "update"
7     def __init__(self, *args, **kwargs):
8         SVN.__init__(self, svnurl=self.svnurl, mode=self.mode, *args, **kwargs)
9
10 class SetConfiguration(ShellCommand):
11     command = ["./WebKitTools/Scripts/set-webkit-configuration"]
12     
13     def __init__(self, *args, **kwargs):
14         configuration = kwargs.pop('configuration')
15         self.command = self.command + ['--' + configuration]
16         self.name = "set-configuration-%s" % (configuration,  )
17         self.description = ["set configuration %s" % (configuration, )]
18         self.descriptionDone = ["set configuration %s" % (configuration, )]
19         ShellCommand.__init__(self, *args, **kwargs)
20
21
22 class LayoutTest(Test):
23     name = "layout-test"
24     description = ["layout-tests running"]
25     descriptionDone = ["layout-tests"]
26     command = ["./WebKitTools/Scripts/run-webkit-tests", "--no-launch-safari", "--results-directory", "layout-test-results"]
27         
28     def commandComplete(self, cmd):
29         Test.commandComplete(self, cmd)
30         
31         logText = cmd.log.getText()
32         incorrectLayoutLines = [line for line in logText.splitlines() if line.find('had incorrect layout') >= 0]
33         if incorrectLayoutLines:
34             self.incorrectLayoutLine = incorrectLayoutLines[0]
35         else:
36             self.incorrectLayoutLine = None
37
38     def getText(self, cmd, results):
39         return self.getText2(cmd, results)
40
41     def getText2(self, cmd, results):
42         if results != SUCCESS and self.incorrectLayoutLine:
43             return [self.incorrectLayoutLine]
44
45         return [self.name]
46
47
48 class JavaScriptCoreTest(Test):
49     name = "jscore-test"
50     description = ["jscore-tests running"]
51     descriptionDone = ["jscore-tests"]
52     command = ["./WebKitTools/Scripts/run-javascriptcore-tests"]
53
54
55 class PixelLayoutTest(LayoutTest):
56     name = "pixel-layout-test"
57     description = ["pixel-layout-tests running"]
58     descriptionDone = ["pixel-layout-tests"]
59     command = LayoutTest.command + ["--pixel"]
60
61     
62 class LeakTest(Test):
63     name = "leak-test"
64     description = ["leak-tests running"]
65     descriptionDone = ["leak-tests"]
66     command = ["./WebKitTools/Scripts/run-webkit-tests", "--no-launch-safari", "--quiet", "--leaks", "--results-directory", "layout-test-results"]
67
68     def commandComplete(self, cmd):
69         Test.commandComplete(self, cmd)
70
71         logText = cmd.log.getText()
72         self.totalLeakLines = [line for line in logText.splitlines() if line.find('total leaks found!') >= 0]
73         self.totalLeakLines += [line for line in logText.splitlines() if line.find('LEAK: ') >= 0]
74         self.totalLeakLines = [' '.join(x.split()[1:]) for x in self.totalLeakLines]
75
76     def evaluateCommand(self, cmd):
77         if cmd.rc != 0:
78             return FAILURE
79
80         if self.totalLeakLines:
81             return FAILURE
82
83         return SUCCESS
84
85     def getText(self, cmd, results):
86         return self.getText2(cmd, results)
87
88     def getText2(self, cmd, results):
89         if results != SUCCESS and self.totalLeakLines:
90             return self.totalLeakLines
91         return [self.name]
92
93
94 class PageLoadTest(UploadCommand, Test):
95     name = "page-load-test"
96     description = ["page-load-tests running"]
97     descriptionDone = ["page-load-tests"]
98     command = ["./WebKitTools/BuildSlaveSupport/run-performance-tests"]
99
100     def __init__(self, *args, **kwargs):
101         UploadCommand.__init__(self, *args, **kwargs)
102         self.command = self.command + ['--upload-results', self.getRemotePath()]
103         Test.__init__(self, *args, **kwargs)
104
105     def getURLPath(self):
106         return UploadCommand.getURLPath(self) + 'PerformanceReportSummary.xml'
107
108
109 class UploadLayoutResults(UploadCommand, ShellCommand):
110     name = "upload-results"
111     description = ["uploading results"]
112     descriptionDone = ["uploaded-results"]
113
114     def __init__(self, *args, **kwargs):
115         UploadCommand.__init__(self, *args, **kwargs)
116         
117         self.command = 'if [[ -d layout-test-results ]]; then find layout-test-results -type d -print0 | xargs -0 chmod ug+rx; find layout-test-results -type f -print0 | xargs -0 chmod ug+r;  rsync -rlvzP --rsync-path="/home/buildresults/bin/rsync" layout-test-results/ %s && rm -rf layout-test-results; fi' % (self.getRemotePath(), )
118
119         ShellCommand.__init__(self, *args, **kwargs)
120
121
122 class CompileWebKit(Compile):
123     command = ["./WebKitTools/Scripts/build-webkit"]
124     def __init__(self, *args, **kwargs):
125         configuration = kwargs.pop('configuration')
126         
127         self.name = "compile-" + configuration
128         self.description = ["compiling " + configuration]
129         self.descriptionDone = ["compiled " + configuration]
130
131         Compile.__init__(self, *args, **kwargs)
132
133
134 class CompileWebKitNoSVG(CompileWebKit):
135     command = CompileWebKit.command + ['--no-svg']
136
137
138 class InstallWin32Dependencies(ShellCommand):
139     description = ["installing Windows dependencies"]
140     descriptionDone = ["installed Windows dependencies"]
141     command = ["WebKitTools/Scripts/install-win-extras"]
142
143
144 class UploadDiskImage(UploadCommand, ShellCommand):
145     description = ["uploading disk image"]
146     descriptionDone = ["uploaded disk image"]
147     name = "upload-disk-image"
148
149     def __init__(self, *args, **kwargs):
150         UploadCommand.__init__(self, *args, **kwargs)
151         self.command = 'umask 002 && ./WebKitTools/BuildSlaveSupport/build-launcher-app && ./WebKitTools/BuildSlaveSupport/build-launcher-dmg --upload-to-host %s' % (self.getRemotePath(), )
152         ShellCommand.__init__(self, *args, **kwargs)