# 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))