Title: [291193] trunk/Tools
Revision
291193
Author
[email protected]
Date
2022-03-11 14:45:35 -0800 (Fri, 11 Mar 2022)

Log Message

[Merge-Queue] Add queue triggered by label addition
https://bugs.webkit.org/show_bug.cgi?id=237615
<rdar://problem/89983452>

Reviewed by Aakash Jain.

* Tools/CISupport/ews-build/config.json: Add Merge-Queue.
* Tools/CISupport/ews-build/events.py:
(GitHubEventHandlerNoEdits): Remove action list, add merge-queue labels.
(GitHubEventHandlerNoEdits.handle_pull_request): Let parent class filter actions, treat
merge-queue label addition as a 'synchronize', but change event name to trigger different
scheduler family.
* Tools/CISupport/ews-build/factories.py:
(MergeQueueFactory): Added.
* Tools/CISupport/ews-build/factories_unittest.py:
(TestExpectedBuildSteps):
* Tools/CISupport/ews-build/loadConfig.py:
(loadBuilderConfig): AnyBranchSchedulers should only accept events which match their name.
* Tools/CISupport/ews-build/loadConfig_unittest.py:
(ConfigDotJSONTest): Match pull request scheduler name to pull request event.

Canonical link: https://commits.webkit.org/248349@main

Modified Paths

Diff

Modified: trunk/Tools/CISupport/ews-build/config.json (291192 => 291193)


--- trunk/Tools/CISupport/ews-build/config.json	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/CISupport/ews-build/config.json	2022-03-11 22:45:35 UTC (rev 291193)
@@ -329,6 +329,12 @@
       "factory": "CommitQueueFactory", "platform": "mac-bigsur",
       "configuration": "release", "architectures": ["x86_64"],
       "workernames": ["webkit-cq-01", "webkit-cq-02", "webkit-cq-03"]
+    },
+    {
+      "name": "Merge-Queue", "shortname": "merge", "icon": "buildAndTest",
+      "factory": "MergeQueueFactory", "platform": "mac-bigsur",
+      "configuration": "release", "architectures": ["x86_64"],
+      "workernames": ["webkit-cq-01", "webkit-cq-02", "webkit-cq-03", "ews151"]
     }
   ],
   "schedulers": [
@@ -347,7 +353,7 @@
       "builderNames": ["Commit-Queue"]
     },
     {
-      "type": "AnyBranchScheduler", "name": "pullrequest",
+      "type": "AnyBranchScheduler", "name": "pull_request",
       "builderNames": [
             "Bindings-Tests-EWS", "GTK-Build-EWS", "iOS-15-Build-EWS", "iOS-15-Simulator-Build-EWS",
             "JSC-ARMv7-32bits-Build-EWS", "JSC-i386-32bits-EWS", "JSC-MIPSEL-32bits-Build-EWS", "JSC-Tests-EWS",
@@ -357,6 +363,10 @@
       ]
     },
     {
+      "type": "AnyBranchScheduler", "name": "merge_queue",
+      "builderNames": ["Merge-Queue"]
+    },
+    {
       "type": "Triggerable", "name": "macos-bigsur-debug-build-ews",
       "builderNames": ["macOS-BigSur-Debug-Build-EWS"]
     },

Modified: trunk/Tools/CISupport/ews-build/events.py (291192 => 291193)


--- trunk/Tools/CISupport/ews-build/events.py	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/CISupport/ews-build/events.py	2022-03-11 22:45:35 UTC (rev 291193)
@@ -311,8 +311,8 @@
 
 
 class GitHubEventHandlerNoEdits(GitHubEventHandler):
-    ACTIONS_TO_TRIGGER_EWS = ('opened', 'synchronize')
     OPEN_STATES = ('open',)
+    MERGE_QUEUE_LABELS = ('merge-queue', 'fast-merge-queue')
 
     @classmethod
     def file_with_status_sign(cls, info):
@@ -350,10 +350,14 @@
         pr_number = payload['number']
         action = ""
         state = payload.get('pull_request', {}).get('state')
-        if action not in self.ACTIONS_TO_TRIGGER_EWS:
-            log.msg('Action {} on PR #{} does not indicate code has been changed'.format(action, pr_number))
-            return ([], 'git')
+        labels = [label.get('name') for label in payload.get('pull_request', {}).get('labels', [])]
+
         if state not in self.OPEN_STATES:
             log.msg("PR #{} is '{}', which triggers nothing".format(pr_number, state))
             return ([], 'git')
+        if action == 'labeled' and any(label in self.MERGE_QUEUE_LABELS for label in labels):
+            log.msg("PR #{} was labeled for merge-queue".format(pr_number))
+            # 'labeled' is usually an ignored action, override it to force build
+            payload['action'] = 'synchronize'
+            return super(GitHubEventHandlerNoEdits, self).handle_pull_request(payload, 'merge_queue')
         return super(GitHubEventHandlerNoEdits, self).handle_pull_request(payload, event)

Modified: trunk/Tools/CISupport/ews-build/factories.py (291192 => 291193)


--- trunk/Tools/CISupport/ews-build/factories.py	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/CISupport/ews-build/factories.py	2022-03-11 22:45:35 UTC (rev 291193)
@@ -314,3 +314,10 @@
         self.addStep(CreateLocalGITCommit())
         self.addStep(PushCommitToWebKitRepo())
         self.addStep(SetBuildSummary())
+
+
+class MergeQueueFactory(factory.BuildFactory):
+    def __init__(self, platform, configuration=None, architectures=None, additionalArguments=None, **kwargs):
+        factory.BuildFactory.__init__(self)
+        self.addStep(ConfigureBuild(platform=platform, configuration=configuration, architectures=architectures, buildOnly=False, triggers=None, remotes=None, additionalArguments=additionalArguments))
+        self.addStep(ValidateChange(verifyMergeQueue=True))

Modified: trunk/Tools/CISupport/ews-build/factories_unittest.py (291192 => 291193)


--- trunk/Tools/CISupport/ews-build/factories_unittest.py	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/CISupport/ews-build/factories_unittest.py	2022-03-11 22:45:35 UTC (rev 291193)
@@ -625,7 +625,11 @@
             'create-local-git-commit',
             'push-commit-to-webkit-repo',
             'set-build-summary'
-        ]
+        ],
+        'Merge-Queue': [
+            'configure-build',
+            'validate-change',
+        ],
     }
 
     def setUp(self):

Modified: trunk/Tools/CISupport/ews-build/loadConfig.py (291192 => 291193)


--- trunk/Tools/CISupport/ews-build/loadConfig.py	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/CISupport/ews-build/loadConfig.py	2022-03-11 22:45:35 UTC (rev 291193)
@@ -30,9 +30,10 @@
 from buildbot.schedulers.forcesched import ForceScheduler, StringParameter, FixedParameter, CodebaseParameter
 from buildbot.worker import Worker
 from buildbot.util import identifiers as buildbot_identifiers
+from buildbot.changes.filter import ChangeFilter
 
 from factories import (APITestsFactory, BindingsFactory, BuildFactory, CommitQueueFactory, Factory, GTKBuildFactory,
-                       GTKTestsFactory, JSCBuildFactory, JSCBuildAndTestsFactory, JSCTestsFactory, StressTestFactory,
+                       GTKTestsFactory, JSCBuildFactory, JSCBuildAndTestsFactory, JSCTestsFactory, MergeQueueFactory, StressTestFactory,
                        StyleFactory, TestFactory, tvOSBuildFactory, WPEFactory, WebKitPerlFactory, WebKitPyFactory,
                        WinCairoFactory, WindowsFactory, iOSBuildFactory, iOSEmbeddedBuildFactory, iOSTestsFactory,
                        macOSBuildFactory, macOSBuildOnlyFactory, macOSWK1Factory, macOSWK2Factory, ServicesFactory, WatchListFactory, watchOSBuildFactory)
@@ -80,10 +81,17 @@
     c['schedulers'] = []
     for scheduler in config['schedulers']:
         schedulerClassName = scheduler.pop('type')
+        schedulerName = scheduler.get('name')
         schedulerClass = globals()[schedulerClassName]
+
+        def filter_fn(change, schedulerName=schedulerName):
+            return change.properties.getProperty('event') == schedulerName
+
         if (schedulerClassName == 'Try_Userpass'):
             # FIXME: Read the credentials from local file on disk.
             scheduler['userpass'] = [(passwords.get('BUILDBOT_TRY_USERNAME', 'sampleuser'), passwords.get('BUILDBOT_TRY_PASSWORD', 'samplepass'))]
+        if schedulerClassName == 'AnyBranchScheduler' and schedulerName:
+            scheduler['change_filter'] = ChangeFilter(filter_fn=filter_fn)
         c['schedulers'].append(schedulerClass(**scheduler))
 
     forceScheduler = ForceScheduler(

Modified: trunk/Tools/CISupport/ews-build/loadConfig_unittest.py (291192 => 291193)


--- trunk/Tools/CISupport/ews-build/loadConfig_unittest.py	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/CISupport/ews-build/loadConfig_unittest.py	2022-03-11 22:45:35 UTC (rev 291193)
@@ -31,7 +31,7 @@
 
 
 class ConfigDotJSONTest(unittest.TestCase):
-    DUPLICATED_TRIGGERS = ['try', 'pullrequest']
+    DUPLICATED_TRIGGERS = ['try', 'pull_request']
 
     def get_config(self):
         cwd = os.path.dirname(os.path.abspath(__file__))

Modified: trunk/Tools/ChangeLog (291192 => 291193)


--- trunk/Tools/ChangeLog	2022-03-11 22:30:31 UTC (rev 291192)
+++ trunk/Tools/ChangeLog	2022-03-11 22:45:35 UTC (rev 291193)
@@ -1,5 +1,28 @@
 2022-03-11  Jonathan Bedard  <[email protected]>
 
+        [Merge-Queue] Add queue triggered by label addition
+        https://bugs.webkit.org/show_bug.cgi?id=237615
+        <rdar://problem/89983452>
+
+        Reviewed by Aakash Jain.
+
+        * CISupport/ews-build/config.json: Add Merge-Queue.
+        * CISupport/ews-build/events.py:
+        (GitHubEventHandlerNoEdits): Remove action list, add merge-queue labels.
+        (GitHubEventHandlerNoEdits.handle_pull_request): Let parent class filter actions, treat
+        merge-queue label addition as a 'synchronize', but change event name to trigger different
+        scheduler family.
+        * CISupport/ews-build/factories.py:
+        (MergeQueueFactory): Added.
+        * CISupport/ews-build/factories_unittest.py:
+        (TestExpectedBuildSteps):
+        * CISupport/ews-build/loadConfig.py:
+        (loadBuilderConfig): AnyBranchSchedulers should only accept events which match their name.
+        * CISupport/ews-build/loadConfig_unittest.py:
+        (ConfigDotJSONTest): Match pull request scheduler name to pull request event.
+
+2022-03-11  Jonathan Bedard  <[email protected]>
+
         [Merge-Queue] Check for merge-queue labels
         https://bugs.webkit.org/show_bug.cgi?id=237690
         <rdar://problem/90064892>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to