Buildbot no longer supports Python 2.7 on the Buildbot master.


This page documents the latest, unreleased version of Buildbot. For documentation for released versions, see 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 custom build report generator is supplied.

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, baseURL=None, verbose=False)
  • 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 is buildbot/%(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.

  • 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

Here’s a complete example of posting build results as a github comment:

def getresults(props):
    master = props.master
    steps = yield
        ('builders', props.getProperty('buildername'), 'builds',
        props.getProperty('buildnumber'), 'steps'))
    for step in steps:
        if step['results'] == util.Results.index('failure'):
            logs = yield"steps", step['stepid'], 'logs'))
            for l in logs:
                all_logs.append('Step : {0} Result : {1}'.format(
                                    step['name'], util.Results[step['results']]))
                l['stepname'] = step['name']
                l['content'] = yield"logs", l['logid'], 'contents'))
                step_logs = l['content']['content'].split('\n')
                include = False
                for i, sl in enumerate(step_logs):
    return '\n'.join(all_logs)

generator = BuildStatusGenerator(message_formatter=MessageFormatterRenderable(getresults))
c['services'].append(GitHubCommentPush(token='githubAPIToken', generators=[generator]))