Title: [267022] trunk/Tools
Revision
267022
Author
[email protected]
Date
2020-09-14 10:47:34 -0700 (Mon, 14 Sep 2020)

Log Message

[EWS] Layout testers can go in an infinite RETRY loop when there are 30+ failures on trunk
https://bugs.webkit.org/show_bug.cgi?id=203698
<rdar://problem/66157544>

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-build/steps.py:
(ConfigureBuild.__init__): Added triggerred_by key.
(ConfigureBuild.start): Set triggers property only if it is not already set (by the build who triggerred this build).
(Trigger.__init__):  Added include_revision parameter, it would be False while triggerring builder, so that builder
can use ToT instead of the specific revision.
Also added triggers, so that when the tester trigger the builder, it can explicitly specify only to trigger it back and
nothing else.
(Trigger.propertiesToPassToTriggers): Pass ews_revision and triggers properties to triggered builds appropriately.
(AnalyzeLayoutTestsResults.retry_build): Trigger the parent build if triggered_by is specified.
* BuildSlaveSupport/ews-build/config.json: Added triggered_by key.
* BuildSlaveSupport/ews-build/factories.py: Updated to handle triggered_by key.
* BuildSlaveSupport/ews-build/loadConfig.py: Ditto.
* BuildSlaveSupport/ews-build/loadConfig_unittest.py:
* BuildSlaveSupport/ews-build/factories_unittest.py:
* BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
(StatusBubble._build_bubble): If the build is retried, ensure that the status-bubble is orange.
(StatusBubble._most_recent_failure_message): Display the retry message from analyze-layout-tests-results step in the status-bubble.

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/ews-app/ews/views/statusbubble.py (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-app/ews/views/statusbubble.py	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-app/ews/views/statusbubble.py	2020-09-14 17:47:34 UTC (rev 267022)
@@ -72,6 +72,7 @@
     DAYS_TO_CHECK = 3
     BUILDER_ICON = u'\U0001f6e0'
     TESTER_ICON = u'\U0001f52c'
+    BUILD_RETRY_MSG = 'retrying build'
 
     def _build_bubble(self, patch, queue, hide_icons=False):
         bubble = {
@@ -151,6 +152,8 @@
         elif build.result == Buildbot.FAILURE:
             bubble['state'] = 'fail'
             bubble['details_message'] = self._most_recent_failure_message(build)
+            if StatusBubble.BUILD_RETRY_MSG in bubble['details_message']:
+                bubble['state'] = 'provisional-fail'
         elif build.result == Buildbot.SKIPPED:
             bubble['state'] = 'none'
             bubble['details_message'] = 'The patch is no longer eligible for processing.'
@@ -239,6 +242,8 @@
 
     def _most_recent_failure_message(self, build):
         for step in build.step_set.all().order_by('-uid'):
+            if step.result == Buildbot.SUCCESS and StatusBubble.BUILD_RETRY_MSG in step.state_string:
+                return step.state_string
             if step.result == Buildbot.FAILURE:
                 return step.state_string
         return ''

Modified: trunk/Tools/BuildSlaveSupport/ews-build/config.json (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-build/config.json	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-build/config.json	2020-09-14 17:47:34 UTC (rev 267022)
@@ -396,6 +396,7 @@
       "platform": "ios-simulator-13",
       "configuration": "release",
       "architectures": ["x86_64"],
+      "triggered_by": ["ios-13-sim-build-ews"],
       "workernames": ["ews121", "ews122", "ews123", "ews124", "ews125", "ews126"]
     },
     {
@@ -427,6 +428,7 @@
       "platform": "mac-mojave",
       "configuration": "release",
       "architectures": ["x86_64"],
+      "triggered_by": ["macos-mojave-release-build-ews"],
       "workernames": ["ews100", "ews101", "ews102", "ews103"]
     },
     {
@@ -437,6 +439,7 @@
       "platform": "mac-mojave",
       "configuration": "release",
       "architectures": ["x86_64"],
+      "triggered_by": ["macos-mojave-release-build-ews"],
       "workernames": ["ews104", "ews105", "ews106", "ews107"]
     },
     {
@@ -458,6 +461,7 @@
       "platform": "mac-mojave",
       "configuration": "debug",
       "architectures": ["x86_64"],
+      "triggered_by": ["macos-mojave-debug-build-ews"],
       "workernames": ["ews112", "ews113", "ews115", "ews117"]
     },
     {
@@ -626,6 +630,7 @@
       "icon": "testOnly",
       "factory": "APITestsFactory",
       "platform": "*",
+      "triggered_by": ["ios-13-sim-build-ews"],
       "workernames": ["ews156", "ews157", "ews158", "ews159"]
     },
     {
@@ -634,6 +639,7 @@
       "icon": "testOnly",
       "factory": "APITestsFactory",
       "platform": "*",
+      "triggered_by": ["macos-mojave-release-build-ews"],
       "workernames": ["ews119", "ews150", "ews153", "ews155"]
     },
     {
@@ -685,6 +691,13 @@
     },
     {
       "type": "Triggerable",
+      "name": "macos-mojave-debug-build-ews",
+      "builderNames": [
+        "macOS-Mojave-Debug-Build-EWS"
+      ]
+    },
+    {
+      "type": "Triggerable",
       "name": "macos-mojave-debug-wk1-tests-ews",
       "builderNames": [
         "macOS-Mojave-Debug-WK1-Tests-EWS"
@@ -692,6 +705,13 @@
     },
     {
       "type": "Triggerable",
+      "name": "macos-mojave-release-build-ews",
+      "builderNames": [
+        "macOS-Mojave-Release-Build-EWS"
+      ]
+    },
+    {
+      "type": "Triggerable",
       "name": "macos-mojave-release-wk1-tests-ews",
       "builderNames": [
         "macOS-Mojave-Release-WK1-Tests-EWS"
@@ -706,6 +726,13 @@
     },
     {
       "type": "Triggerable",
+      "name": "ios-13-sim-build-ews",
+      "builderNames": [
+        "iOS-13-Simulator-Build-EWS"
+      ]
+    },
+    {
+      "type": "Triggerable",
       "name": "ios-13-sim-wk2-tests-ews",
       "builderNames": [
         "iOS-13-Simulator-WK2-Tests-EWS"

Modified: trunk/Tools/BuildSlaveSupport/ews-build/factories.py (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-build/factories.py	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-build/factories.py	2020-09-14 17:47:34 UTC (rev 267022)
@@ -35,9 +35,9 @@
 
 
 class Factory(factory.BuildFactory):
-    def __init__(self, platform, configuration=None, architectures=None, buildOnly=True, triggers=None, remotes=None, additionalArguments=None, checkRelevance=False, **kwargs):
+    def __init__(self, platform, configuration=None, architectures=None, buildOnly=True, triggers=None, triggered_by=None, remotes=None, additionalArguments=None, checkRelevance=False, **kwargs):
         factory.BuildFactory.__init__(self)
-        self.addStep(ConfigureBuild(platform=platform, configuration=configuration, architectures=architectures, buildOnly=buildOnly, triggers=triggers, remotes=remotes, additionalArguments=additionalArguments))
+        self.addStep(ConfigureBuild(platform=platform, configuration=configuration, architectures=architectures, buildOnly=buildOnly, triggers=triggers, triggered_by=triggered_by, remotes=remotes, additionalArguments=additionalArguments))
         if checkRelevance:
             self.addStep(CheckPatchRelevance())
         self.addStep(ValidatePatch())
@@ -114,8 +114,8 @@
         self.addStep(DownloadBuiltProduct())
         self.addStep(ExtractBuiltProduct())
 
-    def __init__(self, platform, configuration=None, architectures=None, additionalArguments=None, checkRelevance=False, **kwargs):
-        Factory.__init__(self, platform=platform, configuration=configuration, architectures=architectures, buildOnly=False, additionalArguments=additionalArguments, checkRelevance=checkRelevance)
+    def __init__(self, platform, configuration=None, architectures=None, triggered_by=None, additionalArguments=None, checkRelevance=False, **kwargs):
+        Factory.__init__(self, platform=platform, configuration=configuration, architectures=architectures, buildOnly=False, triggered_by=triggered_by, additionalArguments=additionalArguments, checkRelevance=checkRelevance)
         if platform == 'gtk':
             self.addStep(InstallGtkDependencies())
         self.getProduct()

Modified: trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-build/factories_unittest.py	2020-09-14 17:47:34 UTC (rev 267022)
@@ -50,7 +50,8 @@
     def test_generic_factory(self):
         factory = factories.Factory(platform='ios-simulator-13', configuration='release', architectures='arm64')
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures='arm64', buildOnly=True, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures='arm64',
+                              buildOnly=True, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -61,7 +62,8 @@
     def test_generic_factory_with_check_relevance(self):
         factory = factories.Factory(platform='ios-simulator-13', configuration='release', architectures='arm64', checkRelevance=True)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures='arm64', buildOnly=True, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures='arm64',
+                              buildOnly=True, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -78,7 +80,8 @@
     def test_style_factory(self):
         factory = factories.StyleFactory(platform='*', configuration=None, architectures=None)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None, buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None,
+                              buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -90,7 +93,8 @@
     def test_watchlist_factory(self):
         factory = factories.WatchListFactory(platform='*', configuration=None, architectures=None)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None, buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None,
+                              buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -102,7 +106,8 @@
     def test_bindings_factory(self):
         factory = factories.BindingsFactory(platform='*', configuration=None, architectures=None)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None, buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None,
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -115,7 +120,8 @@
     def test_webkitperl_factory(self):
         factory = factories.WebKitPerlFactory(platform='*', configuration=None, architectures=None)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None, buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None,
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -127,7 +133,8 @@
     def test_webkitpy_factory(self):
         factory = factories.WebKitPyFactory(platform='*', configuration=None, architectures=None)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None, buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None,
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -142,7 +149,8 @@
     def test_services_factory(self):
         factory = factories.ServicesFactory(platform='*', configuration=None, architectures=None)
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None, buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='*', configuration=None, architectures=None,
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -160,7 +168,8 @@
     def test_generic_build_factory(self):
         factory = factories.BuildFactory(platform='mac-mojave', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -173,7 +182,8 @@
     def test_macos_build_factory(self):
         factory = factories.macOSBuildFactory(platform='mac-mojave', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -186,7 +196,8 @@
     def test_macos_build_only_factory(self):
         factory = factories.macOSBuildOnlyFactory(platform='mac-bigsur', configuration='release', architectures=["arm64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-bigsur', configuration='release', architectures=["arm64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-bigsur', configuration='release', architectures=["arm64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -200,7 +211,8 @@
     def test_ios_build_factory(self):
         factory = factories.iOSBuildFactory(platform='ios-simulator-13', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -213,7 +225,8 @@
     def test_ios_embedded_build_factory(self):
         factory = factories.iOSEmbeddedBuildFactory(platform='ios-13', configuration='release', architectures=["arm64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='ios-13', configuration='release', architectures=["arm64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='ios-13', configuration='release', architectures=["arm64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -226,7 +239,8 @@
     def test_watchos_build_factory(self):
         factory = factories.watchOSBuildFactory(platform='watchos-6', configuration='release', architectures=["arm64_32"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='watchos-6', configuration='release', architectures=["arm64_32"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='watchos-6', configuration='release', architectures=["arm64_32"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -239,7 +253,8 @@
     def test_tvos_build_factory(self):
         factory = factories.tvOSBuildFactory(platform='tvos-13', configuration='release', architectures=["arm64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='tvos-13', configuration='release', architectures=["arm64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='tvos-13', configuration='release', architectures=["arm64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -252,7 +267,8 @@
     def test_gtk_build_factory(self):
         factory = factories.GTKBuildFactory(platform='gtk', configuration='release', architectures=['x86_64'])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='gtk', configuration='release', architectures=['x86_64'], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='gtk', configuration='release', architectures=['x86_64'],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -266,7 +282,8 @@
     def test_wpe_factory(self):
         factory = factories.WPEFactory(platform='wpe', configuration='release', architectures=['x86_64'])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='wpe', configuration='release', architectures=['x86_64'], buildOnly=True, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='wpe', configuration='release', architectures=['x86_64'],
+                              buildOnly=True, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -280,7 +297,8 @@
     def test_wincairo_factory(self):
         factory = factories.WinCairoFactory(platform='wincairo', configuration='release', architectures=['x86_64'])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='wincairo', configuration='release', architectures=['x86_64'], buildOnly=True, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='wincairo', configuration='release', architectures=['x86_64'],
+                              buildOnly=True, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -293,7 +311,8 @@
     def test_jsc_mipsel_factory(self):
         factory = factories.JSCBuildFactory(platform='jsc', configuration='release', architectures=["mipsel"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -307,7 +326,8 @@
     def test_jsc_armv7_factory(self):
         factory = factories.JSCBuildFactory(platform='jsc', configuration='release', architectures=["armv7"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -323,7 +343,8 @@
     def test_windows_factory(self):
         factory = factories.WindowsFactory(platform='win', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='win', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='win', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -342,7 +363,8 @@
     def test_commit_queue_factory(self):
         factory = factories.CommitQueueFactory(platform='mac-mojave', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch, verifycqplus=True),
             _BuildStepFactory(steps.ValidateCommiterAndReviewer),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -371,7 +393,8 @@
     def test_macos_wk1_release_factory(self):
         factory = factories.macOSWK1Factory(platform='mac-mojave', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -390,7 +413,8 @@
     def test_macos_wk1_debug_factory(self):
         factory = factories.macOSWK1Factory(platform='mac-mojave', configuration='debug', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='debug', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='debug', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -409,7 +433,8 @@
     def test_macos_wk2_factory(self):
         factory = factories.macOSWK2Factory(platform='mac-mojave', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='mac-mojave', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -427,7 +452,8 @@
     def test_ios_wk2_factory(self):
         factory = factories.iOSTestsFactory(platform='ios-simulator-13', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='ios-simulator-13', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -445,7 +471,8 @@
     def test_gtk_factory(self):
         factory = factories.GTKTestsFactory(platform='gtk', configuration='release', architectures=["x86_64"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='gtk', configuration='release', architectures=["x86_64"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='gtk', configuration='release', architectures=["x86_64"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
             _BuildStepFactory(steps.CheckOutSource),
@@ -464,7 +491,8 @@
     def test_jsc_mipsel_factory(self):
         factory = factories.JSCBuildFactory(platform='jsc', configuration='release', architectures=["mipsel"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -478,7 +506,8 @@
     def test_jsc_armv7_factory(self):
         factory = factories.JSCBuildFactory(platform='jsc', configuration='release', architectures=["armv7"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -494,7 +523,8 @@
     def test_jsc_mipsel_factory(self):
         factory = factories.JSCBuildFactory(platform='jsc', configuration='release', architectures=["mipsel"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -508,7 +538,8 @@
     def test_jsc_armv7_factory(self):
         factory = factories.JSCBuildFactory(platform='jsc', configuration='release', architectures=["armv7"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -524,7 +555,8 @@
     def test_jsc_mipsel_factory(self):
         factory = factories.JSCTestsFactory(platform='jsc', configuration='release', architectures=["mipsel"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["mipsel"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),
@@ -540,7 +572,8 @@
     def test_jsc_armv7_factory(self):
         factory = factories.JSCTestsFactory(platform='jsc', configuration='release', architectures=["armv7"])
         self.assertBuildSteps(factory.steps, [
-            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"], buildOnly=False, triggers=None, remotes=None, additionalArguments=None),
+            _BuildStepFactory(steps.ConfigureBuild, platform='jsc', configuration='release', architectures=["armv7"],
+                              buildOnly=False, triggers=None, triggered_by=None, remotes=None, additionalArguments=None),
             _BuildStepFactory(steps.CheckPatchRelevance),
             _BuildStepFactory(steps.ValidatePatch),
             _BuildStepFactory(steps.PrintConfiguration),

Modified: trunk/Tools/BuildSlaveSupport/ews-build/loadConfig.py (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-build/loadConfig.py	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-build/loadConfig.py	2020-09-14 17:47:34 UTC (rev 267022)
@@ -62,7 +62,7 @@
         if 'icon' in builder:
             del builder['icon']
         factorykwargs = {}
-        for key in ['platform', 'configuration', 'architectures', 'triggers', 'remotes', 'additionalArguments', 'runTests']:
+        for key in ['platform', 'configuration', 'architectures', 'triggers', 'remotes', 'additionalArguments', 'runTests', 'triggered_by']:
             value = builder.pop(key, None)
             if value:
                 factorykwargs[key] = value
@@ -139,7 +139,7 @@
 def checkValidSchedulers(config, schedulers):
     for scheduler in config.get('schedulers') or []:
         if scheduler.get('type') == 'Triggerable':
-            if not isTriggerUsedByAnyBuilder(config, scheduler['name']):
+            if not isTriggerUsedByAnyBuilder(config, scheduler['name']) and 'build' not in scheduler['name'].lower():
                 raise Exception('Trigger: {} is not used by any builder in config.json'.format(scheduler['name']))
 
 

Modified: trunk/Tools/BuildSlaveSupport/ews-build/loadConfig_unittest.py (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-build/loadConfig_unittest.py	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-build/loadConfig_unittest.py	2020-09-14 17:47:34 UTC (rev 267022)
@@ -40,7 +40,7 @@
         config = json.load(open(os.path.join(cwd, 'config.json')))
         valid_builder_keys = ['additionalArguments', 'architectures', 'builddir', 'configuration', 'description',
                               'defaultProperties', 'env', 'factory', 'icon', 'locks', 'name', 'platform', 'properties',
-                              'remotes', 'runTests', 'shortname', 'tags', 'triggers', 'workernames', 'workerbuilddir']
+                              'remotes', 'runTests', 'shortname', 'tags', 'triggers', 'triggered_by', 'workernames', 'workerbuilddir']
         for builder in config.get('builders', []):
             for key in builder:
                 self.assertTrue(key in valid_builder_keys, 'Unexpected key "{}" for builder {}'.format(key, builder.get('name')))
@@ -49,7 +49,15 @@
         cwd = os.path.dirname(os.path.abspath(__file__))
         config = json.load(open(os.path.join(cwd, 'config.json')))
         builder_to_schduler_map = {}
+        triggered_by_schedulers = []
+        for builder in config['builders']:
+            triggered_by = builder.get('triggered_by')
+            if triggered_by:
+                triggered_by_schedulers.extend(triggered_by)
+
         for scheduler in config.get('schedulers'):
+            if scheduler['name'] in triggered_by_schedulers:
+                continue
             for buildername in scheduler.get('builderNames'):
                 self.assertTrue(buildername not in builder_to_schduler_map, 'builder {} appears multiple times in schedulers.'.format(buildername))
                 builder_to_schduler_map[buildername] = scheduler.get('name')

Modified: trunk/Tools/BuildSlaveSupport/ews-build/steps.py (267021 => 267022)


--- trunk/Tools/BuildSlaveSupport/ews-build/steps.py	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/BuildSlaveSupport/ews-build/steps.py	2020-09-14 17:47:34 UTC (rev 267022)
@@ -22,7 +22,7 @@
 
 from buildbot.plugins import steps, util
 from buildbot.process import buildstep, logobserver, properties
-from buildbot.process.results import Results, SUCCESS, FAILURE, WARNINGS, SKIPPED, EXCEPTION, RETRY
+from buildbot.process.results import Results, SUCCESS, FAILURE, CANCELLED, WARNINGS, SKIPPED, EXCEPTION, RETRY
 from buildbot.steps import master, shell, transfer, trigger
 from buildbot.steps.source import git
 from buildbot.steps.worker import CompositeStepMixin
@@ -51,7 +51,7 @@
     description = ['configuring build']
     descriptionDone = ['Configured build']
 
-    def __init__(self, platform, configuration, architectures, buildOnly, triggers, remotes, additionalArguments):
+    def __init__(self, platform, configuration, architectures, buildOnly, triggers, remotes, additionalArguments, triggered_by=None):
         super(ConfigureBuild, self).__init__()
         self.platform = platform
         if platform != 'jsc-only':
@@ -61,6 +61,7 @@
         self.architecture = ' '.join(architectures) if architectures else None
         self.buildOnly = buildOnly
         self.triggers = triggers
+        self.triggered_by = triggered_by
         self.remotes = remotes
         self.additionalArguments = additionalArguments
 
@@ -75,8 +76,10 @@
             self.setProperty('architecture', self.architecture, 'config.json')
         if self.buildOnly:
             self.setProperty('buildOnly', self.buildOnly, 'config.json')
-        if self.triggers:
+        if self.triggers and not self.getProperty('triggers'):
             self.setProperty('triggers', self.triggers, 'config.json')
+        if self.triggered_by:
+            self.setProperty('triggered_by', self.triggered_by, 'config.json')
         if self.remotes:
             self.setProperty('remotes', self.remotes, 'config.json')
         if self.additionalArguments:
@@ -951,12 +954,14 @@
 
 
 class Trigger(trigger.Trigger):
-    def __init__(self, schedulerNames, **kwargs):
+    def __init__(self, schedulerNames, include_revision=True, triggers=None, **kwargs):
+        self.include_revision = include_revision
+        self.triggers = triggers
         set_properties = self.propertiesToPassToTriggers() or {}
         super(Trigger, self).__init__(schedulerNames=schedulerNames, set_properties=set_properties, **kwargs)
 
     def propertiesToPassToTriggers(self):
-        return {
+        properties_to_pass = {
             'patch_id': properties.Property('patch_id'),
             'bug_id': properties.Property('bug_id'),
             'configuration': properties.Property('configuration'),
@@ -964,8 +969,12 @@
             'fullPlatform': properties.Property('fullPlatform'),
             'architecture': properties.Property('architecture'),
             'owner': properties.Property('owner'),
-            'ews_revision': properties.Property('got_revision'),
         }
+        if self.include_revision:
+            properties_to_pass['ews_revision'] = properties.Property('got_revision')
+        if self.triggers:
+            properties_to_pass['triggers'] = self.triggers
+        return properties_to_pass
 
 
 class TestWithFailureCount(shell.Test):
@@ -2165,11 +2174,20 @@
         return defer.succeed(None)
 
     def retry_build(self, message=''):
-        self.finished(RETRY)
         if not message:
             message = 'Unable to confirm if test failures are introduced by patch, retrying build'
         self.descriptionDone = message
-        self.build.buildFinished([message], RETRY)
+
+        triggered_by = self.getProperty('triggered_by', None)
+        if triggered_by:
+            # Trigger parent build so that it can re-build ToT
+            schduler_for_current_queue = self.getProperty('scheduler')
+            self.build.addStepsAfterCurrentStep([Trigger(schedulerNames=triggered_by, include_revision=False, triggers=[schduler_for_current_queue])])
+            self.setProperty('build_summary', message)
+            self.finished(SUCCESS)
+        else:
+            self.finished(RETRY)
+            self.build.buildFinished([message], RETRY)
         return defer.succeed(None)
 
     def _results_failed_different_tests(self, first_results_failing_tests, second_results_failing_tests):

Modified: trunk/Tools/ChangeLog (267021 => 267022)


--- trunk/Tools/ChangeLog	2020-09-14 17:23:04 UTC (rev 267021)
+++ trunk/Tools/ChangeLog	2020-09-14 17:47:34 UTC (rev 267022)
@@ -1,3 +1,29 @@
+2020-09-14  Aakash Jain  <[email protected]>
+
+        [EWS] Layout testers can go in an infinite RETRY loop when there are 30+ failures on trunk
+        https://bugs.webkit.org/show_bug.cgi?id=203698
+        <rdar://problem/66157544>
+
+        Reviewed by Jonathan Bedard.
+
+        * BuildSlaveSupport/ews-build/steps.py:
+        (ConfigureBuild.__init__): Added triggerred_by key.
+        (ConfigureBuild.start): Set triggers property only if it is not already set (by the build who triggerred this build).
+        (Trigger.__init__):  Added include_revision parameter, it would be False while triggerring builder, so that builder
+        can use ToT instead of the specific revision.
+        Also added triggers, so that when the tester trigger the builder, it can explicitly specify only to trigger it back and
+        nothing else.
+        (Trigger.propertiesToPassToTriggers): Pass ews_revision and triggers properties to triggered builds appropriately.
+        (AnalyzeLayoutTestsResults.retry_build): Trigger the parent build if triggered_by is specified.
+        * BuildSlaveSupport/ews-build/config.json: Added triggered_by key.
+        * BuildSlaveSupport/ews-build/factories.py: Updated to handle triggered_by key.
+        * BuildSlaveSupport/ews-build/loadConfig.py: Ditto.
+        * BuildSlaveSupport/ews-build/loadConfig_unittest.py:
+        * BuildSlaveSupport/ews-build/factories_unittest.py:
+        * BuildSlaveSupport/ews-app/ews/views/statusbubble.py:
+        (StatusBubble._build_bubble): If the build is retried, ensure that the status-bubble is orange.
+        (StatusBubble._most_recent_failure_message): Display the retry message from analyze-layout-tests-results step in the status-bubble.
+
 2020-09-14  Jonathan Bedard  <[email protected]>
 
         [webkitcorepy] Disable AutoInstaller with environment variable
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to