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>