aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Granberg <zorry@gentoo.org>2022-09-25 13:25:32 +0200
committerMagnus Granberg <zorry@gentoo.org>2022-09-25 13:25:32 +0200
commitd81ea07c3ae4c6373ec2a798495481995ca15d7d (patch)
treefc0988db70119ab8fb4e4722e42a4560b2d181ed /patches
parentFix a id error on id 950 (diff)
downloadtinderbox-cluster-d81ea07c3ae4c6373ec2a798495481995ca15d7d.tar.gz
tinderbox-cluster-d81ea07c3ae4c6373ec2a798495481995ca15d7d.tar.bz2
tinderbox-cluster-d81ea07c3ae4c6373ec2a798495481995ca15d7d.zip
Update gitlab patch for 3.6.1
Signed-off-by: Magnus Granberg <zorry@gentoo.org>
Diffstat (limited to 'patches')
-rw-r--r--patches/bb-gitlab.patch184
1 files changed, 56 insertions, 128 deletions
diff --git a/patches/bb-gitlab.patch b/patches/bb-gitlab.patch
index f57a2ac..f8e559d 100644
--- a/patches/bb-gitlab.patch
+++ b/patches/bb-gitlab.patch
@@ -1,5 +1,49 @@
---- a/buildbot/www/hooks/gitlab.py 2022-03-06 15:10:44.000000000 +0100
-+++ b/buildbot/www/hooks/gitlab.py 2022-08-07 22:22:16.570498909 +0200
+diff --git a/buildbot/reporters/gitlab.py b/buildbot/reporters/gitlab.py
+index 5a403d5d0..a6fc698e2 100644
+--- a/buildbot/reporters/gitlab.py
++++ b/buildbot/reporters/gitlab.py
+@@ -169,8 +169,8 @@ class GitLabStatusPush(ReporterBase):
+ # FIXME: probably only want to report status for the last commit in the changeset
+ for sourcestamp in sourcestamps:
+ sha = sourcestamp['revision']
+- if 'source_project_id' in props:
+- proj_id = props['source_project_id']
++ if 'target_project_id' in props:
++ proj_id = props['target_project_id']
+ else:
+ proj_id = yield self.getProjectId(sourcestamp)
+ if proj_id is None:
+@@ -191,8 +191,11 @@ class GitLabStatusPush(ReporterBase):
+ description=description
+ )
+ if res.code not in (200, 201, 204):
+- message = yield res.json()
+- message = message.get('message', 'unspecified error')
++ if res.code.startswith("{"):
++ message = yield res.json()
++ message = message.get('message', 'unspecified error')
++ else:
++ message = res.code
+ log.msg(
+ f'Could not send status "{state}" for '
+ f'{sourcestamp["repository"]} at {sha}: {message}')
+diff --git a/buildbot/secrets/providers/file.py b/buildbot/secrets/providers/file.py
+index 11daf327a..25e010b38 100644
+--- a/buildbot/secrets/providers/file.py
++++ b/buildbot/secrets/providers/file.py
+@@ -55,7 +55,7 @@ class SecretInAFile(SecretProviderBase):
+ secretvalue = source.read()
+ if suffix:
+ secretfile = secretfile[:-len(suffix)]
+- if strip:
++ if strip and not "OPENSSH PRIVATE KEY" in secretvalue:
+ secretvalue = secretvalue.rstrip("\r\n")
+ secrets[secretfile] = secretvalue
+ return secrets
+diff --git a/master/buildbot/www/hooks/gitlab.py b/master/buildbot/www/hooks/gitlab.py
+index 8f2f80a83..40de0273e 100644
+--- a/buildbot/www/hooks/gitlab.py
++++ b/buildbot/www/hooks/gitlab.py
@@ -19,6 +19,8 @@ import re
from dateutil.parser import parse as dateparse
@@ -9,19 +53,18 @@
from twisted.internet.defer import inlineCallbacks
from twisted.python import log
-@@ -26,6 +28,7 @@ from buildbot.process.properties import
- from buildbot.util import bytes2unicode
- from buildbot.www.hooks.base import BaseHookHandler
+@@ -28,6 +30,7 @@ from buildbot.www.hooks.base import BaseHookHandler
-+_HOSTED_BASE_URL = 'https://gitlab.com'
_HEADER_EVENT = b'X-Gitlab-Event'
_HEADER_GITLAB_TOKEN = b'X-Gitlab-Token'
++_HOSTED_BASE_URL = 'https://gitlab.com'
+
-@@ -94,6 +97,35 @@ class GitLabHandler(BaseHookHandler):
+ class GitLabHandler(BaseHookHandler):
+@@ -94,6 +97,34 @@ class GitLabHandler(BaseHookHandler):
return changes
-+ #@inlineCallbacks
+ def _configGitlabRest(self, token, baseURL=None):
+ if baseURL is None:
+ baseURL = _HOSTED_BASE_URL
@@ -53,82 +96,16 @@
def _process_merge_request_change(self, payload, event, codebase=None):
"""
Consumes the merge_request JSON as a python object and turn it into a buildbot change.
-@@ -126,7 +158,7 @@ class GitLabHandler(BaseHookHandler):
+@@ -126,7 +157,7 @@ class GitLabHandler(BaseHookHandler):
changes = [{
'author': f"{commit['author']['name']} <{commit['author']['email']}>",
- 'files': [], # @todo use rest API
-+ 'files' : self._getFiles(attrs),
++ 'files': [], self._getFiles(attrs)
'comments': f"MR#{attrs['iid']}: {attrs['title']}\n\n{attrs['description']}",
'revision': commit['id'],
'when_timestamp': when_timestamp,
-@@ -151,6 +183,65 @@ class GitLabHandler(BaseHookHandler):
- changes[0]['codebase'] = codebase
- return changes
-
-+ def _process_note_addition_to_merge_request(self, payload, event, codebase=None):
-+ """
-+ Consumes a note event JSON as a python object and turn it into a buildbot change.
-+ :arguments:
-+ payload
-+ Python Object that represents the JSON sent by GitLab Service
-+ Hook.
-+ Comments in merge_requests are send as note events by the API
-+ """
-+ attrs = payload['object_attributes']
-+
-+ # handle only note events coming from merge_requests
-+ # this can be direct comments or comments added to a changeset of the MR
-+ #
-+ # editing a comment does NOT lead to an event at all
-+ if 'merge_request' not in payload:
-+ log.msg(f"Found note event (id {attrs['id']}) without corresponding MR - ignore")
-+ return []
-+
-+ # change handling is very similar to the method above, but
-+ commit = payload['merge_request']['last_commit']
-+ when_timestamp = dateparse(commit['timestamp'])
-+ # @todo provide and document a way to choose between http and ssh url
-+ repo_url = payload['merge_request']['target']['git_http_url']
-+ # project name from http headers is empty for me, so get it from
-+ # object_attributes/target/name
-+ mr = payload['merge_request']
-+ project = mr['target']['name']
-+
-+ log.msg(f"Found notes on MR#{mr['iid']}: {attrs['note']}")
-+ changes = [{
-+ 'author': f"{commit['author']['name']} <{commit['author']['email']}>",
-+ 'files': [], # not provided by rest API
-+ 'comments': f"MR#{mr['iid']}: {mr['title']}\n\n{mr['description']}",
-+ 'revision': commit['id'],
-+ 'when_timestamp': when_timestamp,
-+ 'branch': mr['target_branch'],
-+ 'repository': repo_url,
-+ 'project': project,
-+ 'category': event,
-+ 'revlink': mr['url'],
-+ 'properties': {
-+ 'source_branch': mr['source_branch'],
-+ 'source_project_id': mr['source_project_id'],
-+ 'source_repository': mr['source']['git_http_url'],
-+ 'source_git_ssh_url': mr['source']['git_ssh_url'],
-+ 'target_branch': mr['target_branch'],
-+ 'target_project_id': mr['target_project_id'],
-+ 'target_repository': mr['target']['git_http_url'],
-+ 'target_git_ssh_url': mr['target']['git_ssh_url'],
-+ 'event': event,
-+ 'comments': attrs['note'],
-+ },
-+ }]
-+ if codebase is not None:
-+ changes[0]['codebase'] = codebase
-+ return changes
-+
-+
- @inlineCallbacks
- def getChanges(self, request):
- """
-@@ -160,17 +251,21 @@ class GitLabHandler(BaseHookHandler):
+@@ -220,17 +251,21 @@ class GitLabHandler(BaseHookHandler):
request
the http request object
"""
@@ -153,60 +130,11 @@
try:
content = request.content.read()
payload = json.loads(bytes2unicode(content))
-@@ -189,7 +284,11 @@ class GitLabHandler(BaseHookHandler):
- repo_url = payload['repository']['url']
+@@ -250,6 +285,7 @@ class GitLabHandler(BaseHookHandler):
changes = self._process_change(
payload, user, repo, repo_url, event_type, codebase=codebase)
-+ elif event_type == 'note':
-+ changes = self._process_note_addition_to_merge_request(
-+ payload, event_type, codebase=codebase)
elif event_type == 'merge_request':
+ self.gl = self._configGitlabRest(expected_token_value, baseURL=baseUrl_value)
changes = self._process_merge_request_change(
payload, event_type, codebase=codebase)
- else:
---- a/buildbot/reporters/gitlab.py 2022-03-06 15:10:44.000000000 +0100
-+++ b/buildbot/reporters/gitlab.py 2022-08-23 00:11:55.996195542 +0200
-@@ -95,7 +95,7 @@ class GitLabStatusPush(ReporterBase):
- :param branch: Branch name to create the status for.
- :param sha: Full sha to create the status for.
- :param state: one of the following 'pending', 'success', 'failed'
-- or 'cancelled'.
-+ or 'canceled'.
- :param target_url: Target url to associate with this status.
- :param description: Short description of the status.
- :param context: Context of the result
-@@ -155,10 +155,12 @@ class GitLabStatusPush(ReporterBase):
- SKIPPED: 'success',
- EXCEPTION: 'failed',
- RETRY: 'pending',
-- CANCELLED: 'cancelled'
-+ CANCELLED: 'canceled'
- }.get(build['results'], 'failed')
-- else:
-+ elif build.get('started_at'):
- state = 'running'
-+ else:
-+ state = 'pending'
-
- context = yield props.render(self.context)
-
-@@ -167,8 +169,8 @@ class GitLabStatusPush(ReporterBase):
- # FIXME: probably only want to report status for the last commit in the changeset
- for sourcestamp in sourcestamps:
- sha = sourcestamp['revision']
-- if 'source_project_id' in props:
-- proj_id = props['source_project_id']
-+ if 'target_project_id' in props:
-+ proj_id = props['target_project_id']
- else:
- proj_id = yield self.getProjectId(sourcestamp)
- if proj_id is None:
-@@ -189,6 +191,7 @@ class GitLabStatusPush(ReporterBase):
- description=description
- )
- if res.code not in (200, 201, 204):
-+ log.msg(res.code)
- message = yield res.json()
- message = message.get('message', 'unspecified error')
- log.msg(
+ elif event_type == 'note':