def update_pr(pr_number): logging.debug("Updating pull request %i" % pr_number) pr = Issue.get_or_create(pr_number) issue_response = raw_github_request(get_pulls_base() + '/%i' % pr_number, oauth_token=oauth_token, etag=pr.etag) if issue_response is None: logging.debug("PR %i hasn't changed since last visit; skipping" % pr_number) return "Done updating pull request %i (nothing changed)" % pr_number pr.pr_json = json.loads(issue_response.content) pr.etag = issue_response.headers["ETag"] pr.state = pr.pr_json['state'] pr.user = pr.pr_json['user']['login'] pr.updated_at = \ parse_datetime(pr.pr_json['updated_at']).astimezone(tz.tzutc()).replace(tzinfo=None) for issue_number in pr.parsed_title['jiras']: try: link_issue_to_pr("%s-%s" % (app.config['JIRA_PROJECT'], issue_number), pr) except: logging.exception("Exception when linking to JIRA issue %s-%s" % (app.config['JIRA_PROJECT'], issue_number)) try: start_issue_progress("%s-%s" % (app.config['JIRA_PROJECT'], issue_number)) except: logging.exception( "Exception when starting progress on JIRA issue %s-%s" % (app.config['JIRA_PROJECT'], issue_number)) pr.put() # Write our modifications back to the database subtasks = [".update_pr_comments", ".update_pr_review_comments", ".update_pr_files"] for task in subtasks: taskqueue.add(url=url_for(task, pr_number=pr_number), queue_name='fresh-prs') return "Done updating pull request %i" % pr_number
def update_pr(pr_number): logging.debug("Updating pull request %i" % pr_number) pr = Issue.get_or_create(pr_number) issue_response = raw_github_request(PULLS_BASE + '/%i' % pr_number, oauth_token=oauth_token, etag=pr.etag) if issue_response is None: logging.debug("PR %i hasn't changed since last visit; skipping" % pr_number) return "Done updating pull request %i (nothing changed)" % pr_number pr.pr_json = json.loads(issue_response.content) pr.etag = issue_response.headers["ETag"] pr.state = pr.pr_json['state'] pr.user = pr.pr_json['user']['login'] pr.updated_at = \ parse_datetime(pr.pr_json['updated_at']).astimezone(tz.tzutc()).replace(tzinfo=None) for issue_number in pr.parsed_title['jiras']: try: link_issue_to_pr("SPARK-%s" % issue_number, pr) except: logging.exception("Exception when linking to JIRA issue SPARK-%s" % issue_number) try: start_issue_progress("SPARK-%s" % issue_number) except: logging.exception( "Exception when starting progress on JIRA issue SPARK-%s" % issue_number) pr.put() # Write our modifications back to the database subtasks = [".update_pr_comments", ".update_pr_review_comments", ".update_pr_files"] for task in subtasks: taskqueue.add(url=url_for(task, pr_number=pr_number), queue_name='fresh-prs') return "Done updating pull request %i" % pr_number
def test_pr(number): """ Triggers a parametrized Jenkins build for testing Spark pull requests. """ if not (g.user and g.user.has_capability("jenkins")): return abort(403) pr = Issue.get_or_create(number) commit = pr.pr_json["head"]["sha"] target_branch = pr.pr_json["base"]["ref"] # The parameter names here were chosen to match the ones used by Jenkins' GitHub pull request # builder plugin: https://wiki.jenkins-ci.org/display/JENKINS/Github+pull+request+builder+plugin # In the Spark repo, the https://github.com/apache/spark/blob/master/dev/run-tests-jenkins # script reads these variables when posting pull request feedback. query = { 'token': app.config['JENKINS_PRB_TOKEN'], 'ghprbPullId': number, 'ghprbActualCommit': commit, 'ghprbTargetBranch': target_branch, 'ghprbPullTitle': pr.raw_title, # This matches the Jenkins plugin's logic; see # https://github.com/jenkinsci/ghprb-plugin/blob/master/src/main/java/org/jenkinsci/plugins/ghprb/GhprbTrigger.java#L146 # # It looks like origin/pr/*/merge ref points to the last successful test merge commit that # GitHub generates when it checks for mergeability. This API technically isn't documented, # but enough plugins seem to rely on it that it seems unlikely to change anytime soon # (if it does, we can always upgrade our tests to perform the merge ourselves). # # See also: https://developer.github.com/changes/2013-04-25-deprecating-merge-commit-sha/ 'sha1': ("origin/pr/%i/merge" % number) if pr.is_mergeable else commit, } trigger_url = "%sbuildWithParameters?%s" % ( app.config["JENKINS_PRB_JOB_URL"], urllib.urlencode(query)) logging.debug("Triggering Jenkins with url %s" % trigger_url) response = urlfetch.fetch(trigger_url, method="POST") if response.status_code not in (200, 201): logging.error("Jenkins responded with status code %i" % response.status_code) return response.content else: return redirect(app.config["JENKINS_PRB_JOB_URL"])
def test_pr(number): """ Triggers a parametrized Jenkins build for testing Spark pull requests. """ if not (g.user and g.user.has_capability("jenkins")): return abort(403) pr = Issue.get_or_create(number) commit = pr.pr_json["head"]["sha"] target_branch = pr.pr_json["base"]["ref"] # The parameter names here were chosen to match the ones used by Jenkins' GitHub pull request # builder plugin: https://wiki.jenkins-ci.org/display/JENKINS/Github+pull+request+builder+plugin # In the Spark repo, the https://github.com/apache/spark/blob/master/dev/run-tests-jenkins # script reads these variables when posting pull request feedback. query = { 'token': app.config['JENKINS_PRB_TOKEN'], 'ghprbPullId': number, 'ghprbActualCommit': commit, 'ghprbTargetBranch': target_branch, 'ghprbPullTitle': pr.raw_title.encode('utf-8'), # This matches the Jenkins plugin's logic; see # https://github.com/jenkinsci/ghprb-plugin/blob/master/src/main/java/org/jenkinsci/plugins/ghprb/GhprbTrigger.java#L146 # # It looks like origin/pr/*/merge ref points to the last successful test merge commit that # GitHub generates when it checks for mergeability. This API technically isn't documented, # but enough plugins seem to rely on it that it seems unlikely to change anytime soon # (if it does, we can always upgrade our tests to perform the merge ourselves). # # See also: https://developer.github.com/changes/2013-04-25-deprecating-merge-commit-sha/ 'sha1': ("origin/pr/%i/merge" % number) if pr.is_mergeable else commit, } trigger_url = "%sbuildWithParameters?%s" % (app.config["JENKINS_PRB_JOB_URL"], urllib.urlencode(query)) logging.debug("Triggering Jenkins with url %s" % trigger_url) response = urlfetch.fetch(trigger_url, method="POST") if response.status_code not in (200, 201): logging.error("Jenkins responded with status code %i" % response.status_code) return response.content else: return redirect(app.config["JENKINS_PRB_JOB_URL"])
def update_pr(number): Issue.get_or_create(number).update(app.config['GITHUB_OAUTH_KEY']) return "Done updating pull request %i" % number
def update_issue(number): Issue.get_or_create(number).update(app.config['GITHUB_OAUTH_KEY']) return "Done updating issue %i" % number
def update_pr(number): Issue.get_or_create(number).update(app.config["GITHUB_OAUTH_KEY"]) return "Done updating pull request %i" % number