def do_merge_pull_request(pr, build_number, config): """The given pull build passed and needs to be merged. """ github_info = GithubInfo( config['github.owner'], config['github.project'], config['github.username'], config['github.token'], ) jenkins_info = JenkinsInfo( config['jenkins.merge.url'], config['jenkins.merge.job'], config['jenkins.merge.token'], ) build_url = generate_build_url(build_number, jenkins_info) try: result = merge_pull_request(pr, build_url, github_info) if result['merged']: return result['message'] else: raise GithubError('Failed to merge: {0}'.format(result['message'])) except GithubError as exc: return 'Failed to add comment: {0}'.format(exc)
def test_merge_pull_request_fails(self): merge_response = load_data('github-merge-failed.json') pulls = load_data('github-open-pulls.json', load_json=True) pull_request = pulls[0] responses.add( responses.GET, 'https://api.github.com/repos/CanonicalJS/juju-gui/pulls/4', body=json.dumps(pull_request), status=200, content_type='application/json' ) responses.add( responses.PUT, 'https://api.github.com/repos/CanonicalJS/juju-gui/pulls/4/merge', body=merge_response, status=405, content_type='application/json' ) info = GithubInfo('CanonicalJS', 'juju-gui', 'jujugui', None) result = merge_pull_request( 4, 'http://jenkins.com/job/gui/12', info ) self.assertEqual(False, result['merged']) self.assertEqual("Failure reason", result['message'])