def trigger_mergable_commits(request):
    config = request.registry.settings
    mergable = mergeable_pull_requests(
        config['jenkins.merge.trigger'],
        GithubInfo(
            config['github.owner'],
            config['github.project'],
            config['github.username'],
            config['github.token'],
        )
    )

    if mergable:
        kicked = []
        jenkins_info = JenkinsInfo(
            config['jenkins.merge.url'],
            config['jenkins.merge.job'],
            config['jenkins.merge.token'],
        )

        for pr in mergable:
            kick_jenkins_merge(pr['number'], pr['head']['sha'], jenkins_info)

            kicked.append('Kicking pull request: {} at sha {}'.format(
                pr['number'], pr['head']['sha']
            ))
        ret = "\n".join(kicked)
    else:
        ret = "No pull requests to merge."

    return Response(ret)
Exemple #2
0
def kick_mergeable_pull_requests(config):
    """Check github for pull requests that include the merge command.

    If the merge command is found, the -merge job in jenkins is kicked to
    start running.

    :return kicked: The list of pull requests that were kicked.

    """
    github_info = GithubInfo(
        config['github.owner'],
        config['github.project'],
        config['github.username'],
        config['github.token'],
    )

    mergable = mergeable_pull_requests(
        config['jenkins.merge.trigger'],
        github_info,
    )

    kicked = []
    if mergable:
        jenkins_info = JenkinsInfo(
            config['jenkins.merge.url'],
            config['jenkins.merge.job'],
            config['jenkins.merge.token'],
        )

        for pr in mergable:
            try:
                kick_jenkins_merge(
                    pr['number'], pr['head']['sha'], jenkins_info)
                kicked.append('Kicking pull request: {} at sha {}'.format(
                    pr['number'], pr['head']['sha']
                ))

                # Notify the pull request that we've scheduled a build for it.
                jenkins_url = generate_job_url(jenkins_info)
                pull_request_kicked(pr, jenkins_url, github_info)

            except JenkinsError as exc:
                kicked.append(
                    'Failed to kick {0}. Failure message: {1}'.format(
                        pr['number'],
                        exc
                    )
                )

    return kicked
Exemple #3
0
def kick_mergeable_pull_requests(config):
    """Check github for pull requests that include the merge command.

    If the merge command is found, the -merge job in jenkins is kicked to
    start running.

    :return kicked: The list of pull requests that were kicked.

    """
    github_info = GithubInfo(
        config['github.owner'],
        config['github.project'],
        config['github.username'],
        config['github.token'],
    )

    mergable = mergeable_pull_requests(
        config['jenkins.merge.trigger'],
        github_info,
    )

    kicked = []
    if mergable:
        jenkins_info = JenkinsInfo(
            config['jenkins.merge.url'],
            config['jenkins.merge.job'],
            config['jenkins.merge.token'],
        )

        for pr in mergable:
            try:
                kick_jenkins_merge(pr['number'], pr['head']['sha'],
                                   jenkins_info)
                kicked.append('Kicking pull request: {} at sha {}'.format(
                    pr['number'], pr['head']['sha']))

                # Notify the pull request that we've scheduled a build for it.
                jenkins_url = generate_job_url(jenkins_info)
                pull_request_kicked(pr, jenkins_url, github_info)

            except JenkinsError as exc:
                kicked.append(
                    'Failed to kick {0}. Failure message: {1}'.format(
                        pr['number'], exc))

    return kicked
Exemple #4
0
    def test_kick_jenkins_merge(self):
        responses.add(responses.POST,
                      'http://jenkins.com/job/one/buildWithArguments',
                      body='',
                      status=200,
                      content_type='application/json')

        info = JenkinsInfo('http://jenkins.com/job/{}/buildWithArguments',
                           'one', '1234')
        result = kick_jenkins_merge(4, 'sha1232', info)

        self.assertIsNone(result)
    def test_kick_jenkins_merge(self):
        responses.add(
            responses.POST,
            'http://jenkins.com/job/one/buildWithArguments',
            body='',
            status=200,
            content_type='application/json'
        )

        info = JenkinsInfo(
            'http://jenkins.com/job/{}/buildWithArguments', 'one', '1234')
        result = kick_jenkins_merge(4, 'sha1232', info)

        self.assertIsNone(result)