265 lines
12 KiB
Python
265 lines
12 KiB
Python
# Copyright (C) 2017-2021 Apple Inc. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
|
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
from buildbot.process import factory
|
|
from buildbot.steps import trigger
|
|
|
|
from steps import *
|
|
|
|
|
|
class Factory(factory.BuildFactory):
|
|
def __init__(self, platform, configuration, architectures, buildOnly, additionalArguments, device_model):
|
|
factory.BuildFactory.__init__(self)
|
|
self.addStep(ConfigureBuild(platform=platform, configuration=configuration, architecture=" ".join(architectures), buildOnly=buildOnly, additionalArguments=additionalArguments, device_model=device_model))
|
|
self.addStep(PrintConfiguration())
|
|
self.addStep(CheckOutSource())
|
|
self.addStep(ShowIdentifier())
|
|
if not (platform == "jsc-only"):
|
|
self.addStep(KillOldProcesses())
|
|
self.addStep(CleanBuildIfScheduled())
|
|
self.addStep(DeleteStaleBuildFiles())
|
|
if platform == "win":
|
|
self.addStep(InstallWin32Dependencies())
|
|
if platform == "gtk" and "--no-experimental-features" not in (additionalArguments or []):
|
|
self.addStep(InstallGtkDependencies())
|
|
if platform == "wpe":
|
|
self.addStep(InstallWpeDependencies())
|
|
|
|
|
|
class BuildFactory(Factory):
|
|
ShouldRunJSCBundleStep = False
|
|
ShouldRunMiniBrowserBundleStep = False
|
|
|
|
def __init__(self, platform, configuration, architectures, triggers=None, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, True, additionalArguments, device_model)
|
|
|
|
if platform == "win" or platform.startswith("playstation"):
|
|
self.addStep(CompileWebKit(timeout=2 * 60 * 60))
|
|
else:
|
|
self.addStep(CompileWebKit())
|
|
|
|
if self.ShouldRunJSCBundleStep:
|
|
self.addStep(GenerateJSCBundle())
|
|
if self.ShouldRunMiniBrowserBundleStep:
|
|
self.addStep(GenerateMiniBrowserBundle())
|
|
|
|
if triggers:
|
|
if platform == "gtk":
|
|
self.addStep(InstallBuiltProduct())
|
|
|
|
self.addStep(ArchiveBuiltProduct())
|
|
self.addStep(UploadBuiltProduct())
|
|
if platform.startswith('mac') or platform.startswith('ios-simulator') or platform.startswith('tvos-simulator') or platform.startswith('watchos-simulator'):
|
|
self.addStep(ArchiveMinifiedBuiltProduct())
|
|
self.addStep(UploadMinifiedBuiltProduct())
|
|
self.addStep(TransferToS3())
|
|
self.addStep(trigger.Trigger(schedulerNames=triggers))
|
|
|
|
|
|
class TestFactory(Factory):
|
|
JSCTestClass = RunJavaScriptCoreTests
|
|
LayoutTestClass = RunWebKitTests
|
|
|
|
def getProduct(self):
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None, **kwargs):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model, **kwargs)
|
|
self.getProduct()
|
|
|
|
if platform == 'wincairo':
|
|
self.addStep(InstallWinCairoDependencies())
|
|
|
|
if platform.startswith('mac') or platform.startswith('ios-simulator'):
|
|
self.addStep(WaitForCrashCollection())
|
|
|
|
if self.JSCTestClass:
|
|
self.addStep(self.JSCTestClass())
|
|
if self.LayoutTestClass:
|
|
self.addStep(self.LayoutTestClass())
|
|
if not platform.startswith('win'):
|
|
self.addStep(RunDashboardTests())
|
|
if self.LayoutTestClass:
|
|
self.addStep(ArchiveTestResults())
|
|
self.addStep(UploadTestResults())
|
|
self.addStep(ExtractTestResults())
|
|
self.addStep(SetPermissions())
|
|
|
|
if platform.startswith('win') or platform.startswith('mac') or platform.startswith('ios-simulator'):
|
|
self.addStep(RunAPITests())
|
|
|
|
if platform.startswith('mac') and (platform != 'mac-catalina'):
|
|
self.addStep(RunLLDBWebKitTests())
|
|
|
|
self.addStep(RunWebKitPyTests())
|
|
self.addStep(RunPerlTests())
|
|
self.addStep(RunBindingsTests())
|
|
self.addStep(RunBuiltinsTests())
|
|
|
|
if platform.startswith('mac') or platform.startswith('ios-simulator'):
|
|
self.addStep(TriggerCrashLogSubmission())
|
|
|
|
if platform == "gtk":
|
|
self.addStep(RunGtkAPITests())
|
|
if additionalArguments and "--display-server=wayland" in additionalArguments:
|
|
self.addStep(RunWebDriverTests())
|
|
if platform == "wpe":
|
|
self.addStep(RunWPEAPITests())
|
|
self.addStep(RunWebDriverTests())
|
|
|
|
|
|
class BuildAndTestFactory(TestFactory):
|
|
def getProduct(self):
|
|
self.addStep(CompileWebKit())
|
|
|
|
def __init__(self, platform, configuration, architectures, triggers=None, additionalArguments=None, device_model=None, **kwargs):
|
|
TestFactory.__init__(self, platform, configuration, architectures, additionalArguments, device_model, **kwargs)
|
|
if triggers:
|
|
self.addStep(ArchiveBuiltProduct())
|
|
self.addStep(UploadBuiltProduct())
|
|
self.addStep(trigger.Trigger(schedulerNames=triggers))
|
|
|
|
|
|
class BuildAndTestLLINTCLoopFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, triggers=None, additionalArguments=None, device_model=None, **kwargs):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model, **kwargs)
|
|
self.addStep(CompileLLINTCLoop())
|
|
self.addStep(RunLLINTCLoopTests())
|
|
|
|
|
|
class BuildAndTest32bitJSCFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, triggers=None, additionalArguments=None, device_model=None, **kwargs):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model, **kwargs)
|
|
self.addStep(Compile32bitJSC())
|
|
self.addStep(Run32bitJSCTests())
|
|
|
|
|
|
class BuildAndNonLayoutTestFactory(BuildAndTestFactory):
|
|
LayoutTestClass = None
|
|
|
|
|
|
class BuildAndJSCTestsFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, triggers=None, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model)
|
|
self.addStep(CompileJSCOnly(timeout=60 * 60))
|
|
self.addStep(RunJavaScriptCoreTests(timeout=60 * 60))
|
|
|
|
|
|
class TestAllButJSCFactory(TestFactory):
|
|
JSCTestClass = None
|
|
|
|
|
|
class BuildAndTestAllButJSCFactory(BuildAndTestFactory):
|
|
JSCTestClass = None
|
|
|
|
def __init__(self, platform, configuration, architectures, triggers=None, additionalArguments=None, device_model=None, **kwargs):
|
|
BuildAndTestFactory.__init__(self, platform, configuration, architectures, additionalArguments, device_model, **kwargs)
|
|
self.addStep(RunWebDriverTests())
|
|
|
|
|
|
class BuildAndGenerateJSCBundleFactory(BuildFactory):
|
|
ShouldRunJSCBundleStep = True
|
|
|
|
|
|
class BuildAndGenerateMiniBrowserBundleFactory(BuildFactory):
|
|
ShouldRunMiniBrowserBundleStep = True
|
|
|
|
|
|
class BuildAndGenerateMiniBrowserJSCBundleFactory(BuildFactory):
|
|
ShouldRunJSCBundleStep = True
|
|
ShouldRunMiniBrowserBundleStep = True
|
|
|
|
|
|
class TestJSCFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model)
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
self.addStep(RunJavaScriptCoreTests())
|
|
|
|
|
|
class Test262Factory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model)
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
self.addStep(RunTest262Tests())
|
|
|
|
|
|
class TestJSFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model)
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
self.addStep(RunJavaScriptCoreTests())
|
|
self.addStep(RunTest262Tests())
|
|
|
|
|
|
class TestLayoutFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model)
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
self.addStep(RunWebKitTests())
|
|
if not platform.startswith('win'):
|
|
self.addStep(RunDashboardTests())
|
|
self.addStep(ArchiveTestResults())
|
|
self.addStep(UploadTestResults())
|
|
self.addStep(ExtractTestResults())
|
|
self.addStep(SetPermissions())
|
|
|
|
|
|
class TestWebDriverFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model)
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
self.addStep(RunWebDriverTests())
|
|
|
|
|
|
class TestWebKit1Factory(TestFactory):
|
|
LayoutTestClass = RunWebKit1Tests
|
|
|
|
|
|
class TestWebKit1AllButJSCFactory(TestWebKit1Factory):
|
|
JSCTestClass = None
|
|
|
|
|
|
class BuildAndPerfTestFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None, **kwargs):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model, **kwargs)
|
|
self.addStep(CompileWebKit())
|
|
self.addStep(RunAndUploadPerfTests())
|
|
if platform == "gtk":
|
|
self.addStep(RunBenchmarkTests(timeout=2000))
|
|
|
|
|
|
class DownloadAndPerfTestFactory(Factory):
|
|
def __init__(self, platform, configuration, architectures, additionalArguments=None, device_model=None, **kwargs):
|
|
Factory.__init__(self, platform, configuration, architectures, False, additionalArguments, device_model, **kwargs)
|
|
self.addStep(DownloadBuiltProduct())
|
|
self.addStep(ExtractBuiltProduct())
|
|
self.addStep(RunAndUploadPerfTests())
|
|
if platform == "gtk":
|
|
self.addStep(RunBenchmarkTests(timeout=2000))
|