| # Copyright (C) 2017-2022 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(CheckOutSpecificRevision()) |
| 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()) |
| |
| # FIXME: Re-enable these tests for Monterey once webkit.org/b/239463 is resolved. |
| if platform.startswith('mac') and (platform != 'mac-monterey'): |
| 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)) |