From 65dd3e63dc0dc34a531eee703baff715ba04d0a0 Mon Sep 17 00:00:00 2001 From: magic_rb Date: Wed, 10 Jul 2024 13:00:48 +0200 Subject: [PATCH 1/3] Support per installation tokens in `GithubStatusPush` reporter Signed-off-by: magic_rb --- master/buildbot/reporters/github.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/master/buildbot/reporters/github.py b/master/buildbot/reporters/github.py index 3873c2676..e61e6495a 100644 --- a/master/buildbot/reporters/github.py +++ b/master/buildbot/reporters/github.py @@ -70,7 +70,14 @@ class GitHubStatusPush(ReporterBase): generators=None, **kwargs, ): - token = yield self.renderSecrets(token) + headers = {} + if not callable(token): + token = yield self.renderSecrets(token) + headers['Authorization'] = 'token ' + token + else: + self.token_cache = {} + self.token_source = token + self.debug = debug self.verify = verify self.verbose = verbose @@ -89,7 +96,7 @@ class GitHubStatusPush(ReporterBase): self._http = yield httpclientservice.HTTPClientService.getService( self.master, baseURL, - headers={'Authorization': 'token ' + token, 'User-Agent': 'Buildbot'}, + headers={'User-Agent': 'Buildbot'} | headers, debug=self.debug, verify=self.verify, ) @@ -135,6 +142,11 @@ class GitHubStatusPush(ReporterBase): txgithub is based on twisted's webclient agent, which is much less reliable and featureful as txrequest (support for proxy, connection pool, keep alive, retry, etc) """ + headers = {} + + if hasattr(self, 'token_source'): + headers['Authorization'] = 'token ' + self.token_source(f"{repo_user}/{repo_name}") + payload = {'state': state} if description is not None: @@ -147,7 +159,9 @@ class GitHubStatusPush(ReporterBase): payload['context'] = context return self._http.post( - '/'.join(['/repos', repo_user, repo_name, 'statuses', sha]), json=payload + '/'.join(['/repos', repo_user, repo_name, 'statuses', sha]), + json=payload, + headers=headers, ) def is_status_2xx(self, code): -- 2.44.1