Title: [287949] trunk/Tools
Revision
287949
Author
jbed...@apple.com
Date
2022-01-12 13:17:51 -0800 (Wed, 12 Jan 2022)

Log Message

[EWS] Accept GitHub hooks (Part 1)
https://bugs.webkit.org/show_bug.cgi?id=235033
<rdar://problem/87345269>

Reviewed by Aakash Jain

Trigger a subset of queues for incoming GitHub pull-requests.

* Tools/CISupport/ews-build/config.json: Enable webkitperl, webkitpy, services and style checks.
* Tools/CISupport/ews-build/loadConfig_unittest.py:
(ConfigDotJSONTest):
(ConfigDotJSONTest.test_multiple_scheduers_for_builder):
* Tools/CISupport/ews-build/master.cfg: Accept GitHub hooks, specify variables
to extract from incoming request.
* Tools/CISupport/ews-build/steps.py:
(GitHub):
(GitHub.repository_urls): Concatenate all valid projects with the base URL.
(GitHub.pr_url): Given a repository and pull-request number, return the URL
for that pull-request.
(ConfigureBuild.add_pr_details):
(GitHubMixin): Deleted.

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

Modified Paths

Diff

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


--- trunk/Tools/CISupport/ews-build/config.json	2022-01-12 21:17:49 UTC (rev 287948)
+++ trunk/Tools/CISupport/ews-build/config.json	2022-01-12 21:17:51 UTC (rev 287949)
@@ -347,6 +347,13 @@
       "builderNames": ["Commit-Queue"]
     },
     {
+      "type": "AnyBranchScheduler", "name": "pullrequest",
+      "builderNames": [
+            "Services-EWS", "Style-EWS", "Style-EWS",
+            "WebKitPerl-Tests-EWS", "WebKitPy-Tests-EWS"
+      ]
+    },
+    {
       "type": "Triggerable", "name": "macos-catalina-debug-build-ews",
       "builderNames": ["macOS-Catalina-Debug-Build-EWS"]
     },

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


--- trunk/Tools/CISupport/ews-build/loadConfig_unittest.py	2022-01-12 21:17:49 UTC (rev 287948)
+++ trunk/Tools/CISupport/ews-build/loadConfig_unittest.py	2022-01-12 21:17:51 UTC (rev 287949)
@@ -31,6 +31,8 @@
 
 
 class ConfigDotJSONTest(unittest.TestCase):
+    DUPLICATED_TRIGGERS = ['try', 'pullrequest']
+
     def get_config(self):
         cwd = os.path.dirname(os.path.abspath(__file__))
         with open(os.path.join(cwd, 'config.json'), 'r') as config:
@@ -72,7 +74,10 @@
             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))
+                if scheduler.get('name') in self.DUPLICATED_TRIGGERS and builder_to_schduler_map.get(buildername):
+                    self.assertTrue(builder_to_schduler_map[buildername] in self.DUPLICATED_TRIGGERS)
+                else:
+                    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')
 
     def test_schduler_contains_valid_builder_name(self):

Modified: trunk/Tools/CISupport/ews-build/master.cfg (287948 => 287949)


--- trunk/Tools/CISupport/ews-build/master.cfg	2022-01-12 21:17:49 UTC (rev 287948)
+++ trunk/Tools/CISupport/ews-build/master.cfg	2022-01-12 21:17:51 UTC (rev 287949)
@@ -8,6 +8,18 @@
 import loadConfig
 from events import Events
 
+
+def load_password(name):
+    if os.getenv(name):
+        return os.getenv(name)
+    try:
+        passwords = json.load(open('passwords.json'))
+        return passwords.get(name, None)
+    except Exception as e:
+        print('Error in finding {} in passwords.json'.format(name))
+        return None
+
+
 # This is work-around for Twisted having a small size limit for patches. See https://bugs.webkit.org/show_bug.cgi?id=198851#c5
 from twisted.spread import banana
 banana.SIZE_LIMIT = 100 * 1024 * 1024
@@ -28,6 +40,18 @@
     'Builders.buildFetchLimit': 1000,
     'Workers.showWorkerBuilders': True,
 }
+c['www']['change_hook_dialects'] = dict(
+    github=dict(
+        secret=load_password('GITHUB_HOOK_SECRET'),
+        github_property_whitelist=[
+            'github.number',
+            'github.title',
+            'github.head.ref',
+            'github.base.sha',
+            'github.head.repo.full_name',
+        ],
+    ),
+)
 
 if not is_test_mode_enabled:
     admin_username = os.getenv('EWS_ADMIN_USERNAME')

Modified: trunk/Tools/CISupport/ews-build/steps.py (287948 => 287949)


--- trunk/Tools/CISupport/ews-build/steps.py	2022-01-12 21:17:49 UTC (rev 287948)
+++ trunk/Tools/CISupport/ews-build/steps.py	2022-01-12 21:17:51 UTC (rev 287949)
@@ -55,7 +55,8 @@
 WithProperties = properties.WithProperties
 Interpolate = properties.Interpolate
 BRANCH_PR_RE = re.compile(r'^refs/pull/(?P<id>\d+)/merge$')
-GITHUB_REPOSITORIES = ['https://github.com/WebKit/WebKit']
+GITHUB_URL = 'https://github.com/'
+GITHUB_PROJECTS = ['WebKit/WebKit']
 
 
 class BufferLogHeaderObserver(logobserver.BufferLogObserver):
@@ -71,32 +72,24 @@
         return self._get(self.headers)
 
 
-class GitHubMixin(object):
-    def pr_url(self, pr_number=None):
-        pr_number = pr_number or self.get_pull_request_number()
-        if not pr_number:
-            return ''
-        return '{}/pull/{}'.format(self.getProperty('repository', '-'), pr_number)
+class GitHub(object):
+    @classmethod
+    def repository_urls(cls):
+        return [GITHUB_URL + project for project in GITHUB_PROJECTS]
 
-    def get_pull_request_number(self):
-        pr_number = self.getProperty('pull_request')
-        if pr_number:
-            return int(pr_number)
+    @classmethod
+    def pr_url(cls, pr_number, repository_url=None):
+        if not repository_url:
+            repository_url = '{}{}'.format(GITHUB_URL, GITHUB_PROJECTS[0])
 
-        if self.getProperty('event') != 'pull_request':
-            return None
-        if self.getProperty('repository') not in GITHUB_REPOSITORIES:
-            return None
+        if repository_url not in GitHub.repository_urls():
+            return ''
+        if not pr_number or not isinstance(pr_number, int):
+            return ''
+        return '{}pull/{}'.format(repository_url, pr_number)
 
-        match = BRANCH_PR_RE.match(self.getProperty('branch', ''))
-        if not match:
-            return None
-        pr_number = int(match.group('id'))
-        self.setProperty('pull_request', pr_number)
-        return pr_number
 
-
-class ConfigureBuild(buildstep.BuildStep, GitHubMixin):
+class ConfigureBuild(buildstep.BuildStep):
     name = 'configure-build'
     description = ['configuring build']
     descriptionDone = ['Configured build']
@@ -147,9 +140,9 @@
             self.addURL('Patch {}'.format(patch_id), Bugzilla.patch_url(patch_id))
 
     def add_pr_details(self):
-        pr_number = self.get_pull_request_number()
+        pr_number = self.getProperty('github.number')
         if pr_number:
-            self.addURL('Pull request {}'.format(pr_number), self.pr_url(pr_number=pr_number))
+            self.addURL('Pull request {}'.format(pr_number), GitHub.pr_url(pr_number=pr_number, repository_url=self.getProperty('repository')) or '')
 
 
 class CheckOutSource(git.Git):

Modified: trunk/Tools/ChangeLog (287948 => 287949)


--- trunk/Tools/ChangeLog	2022-01-12 21:17:49 UTC (rev 287948)
+++ trunk/Tools/ChangeLog	2022-01-12 21:17:51 UTC (rev 287949)
@@ -1,3 +1,27 @@
+2022-01-12  Jonathan Bedard  <jbed...@apple.com>
+
+        [EWS] Accept GitHub hooks (Part 1)
+        https://bugs.webkit.org/show_bug.cgi?id=235033
+        <rdar://problem/87345269>
+
+        Reviewed by Aakash Jain.
+
+        Trigger a subset of queues for incoming GitHub pull-requests.
+
+        * CISupport/ews-build/config.json: Enable webkitperl, webkitpy, services and style checks.
+        * CISupport/ews-build/loadConfig_unittest.py:
+        (ConfigDotJSONTest):
+        (ConfigDotJSONTest.test_multiple_scheduers_for_builder):
+        * CISupport/ews-build/master.cfg: Accept GitHub hooks, specify variables
+        to extract from incoming request.
+        * CISupport/ews-build/steps.py:
+        (GitHub):
+        (GitHub.repository_urls): Concatenate all valid projects with the base URL.
+        (GitHub.pr_url): Given a repository and pull-request number, return the URL
+        for that pull-request.
+        (ConfigureBuild.add_pr_details):
+        (GitHubMixin): Deleted.
+
 2022-01-12  Alex Christensen  <achristen...@webkit.org>
 
         Build WebKitSwift when building with make or build-webkit
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to