Caution
Buildbot no longer supports Python 2.7 on the Buildbot master.
2.5.14.8. GitHubCommentPush¶
from buildbot.plugins import reporters, util
context = Interpolate("bb/%(prop:buildername)s")
c['services'].append(reporters.GitHubCommentPush(token='githubAPIToken', context=context))
GitHubCommentPush
publishes a comment on a GitHub PR using GitHub Review Comments API.
It requires txrequests package to allow interaction with GitHub REST API.
It requires a GitHub API token in order to operate.
By default, the reporter will only comment at the end of a build unless a startDescription
is provided.
You can create a token from your own GitHub - Profile - Applications - Register new application or use an external tool to generate one.
-
class
buildbot.plugins.reporters.
GitHubCommentPush
(token, context=None, generators=None, startDescription=None, endDescription=None, baseURL=None, verbose=False, builders=None)¶ - Parameters
token (string) – token used for authentication. (can be a Secret)
context (renderable string) – Passed to GitHub to differentiate between statuses. A static string can be passed or
Interpolate
for dynamic substitution. The default context isbuildbot/%(prop:buildername)s
.generators (list of IReportGenerator instances) – A list of report generators that will be used to generate reports to be sent by this reporter. Currently the reporter will consider only the report generated by the first generator.
startDescription (renderable string) – Custom start message (default:
None
). This parameter is deprecated, usegenerators
instead.endDescription (renderable string) – Custom end message (default: ‘Build done.’). This parameter is deprecated, use
generators
instead.baseURL (string) – specify the github api endpoint if you work with GitHub Enterprise
verbose (boolean) – if True, logs a message for each successful status push
builders (list) – only send update for specified builders. This parameter is deprecated, use
generators
instead.
Here’s a complete example of posting build results as a github comment:
@util.renderer
@defer.inlineCallbacks
def getresults(props):
all_logs=[]
master = props.master
steps = yield props.master.data.get(
('builders', props.getProperty('buildername'), 'builds',
props.getProperty('buildnumber'), 'steps'))
for step in steps:
if step['results'] == util.Results.index('failure'):
logs = yield master.data.get(("steps", step['stepid'], 'logs'))
for l in logs:
all_logs.append('Step : {0} Result : {1}'.format(
step['name'], util.Results[step['results']]))
all_logs.append('```')
l['stepname'] = step['name']
l['content'] = yield master.data.get(("logs", l['logid'], 'contents'))
step_logs = l['content']['content'].split('\n')
include = False
for i, sl in enumerate(step_logs):
all_logs.append(sl[1:])
all_logs.append('```')
return '\n'.join(all_logs)
generator = BuildStatusGenerator(message_formatter=MessageFormatterRenderable(getresults))
c['services'].append(GitHubCommentPush(token='githubAPIToken', generators=[generator]))