def runFunctionCoreTests(request): """ When we are called by GH we want to run the jenkins core-dev builds """ payload = request.json_body # Going to run the core-dev tests for commit in payload['commits']: who = commit['name'] + '<' + commit['author'] + '>' message = 'Commit trigger on core-dev' add_log(request, who, message) # We need to run the core-dev tests jenkins = request.registry.settings['jenkins'] # with a callback with the last commit hash # we should store all of them but right now is ok last_commit = payload['commits'][0]['id'] url = request.registry.settings['callback_url'] + 'corecommit?commit_hash=' + last_commit for job in jenkins_jobs: jenkins_job(request, job, url)
def runFunctionPushTests(request): """ When we are called by GH we want to run the jenkins core-dev builds """ add_log(request, "github", "Sent us a pull request.") payload = request.json_body repo_name = payload['repository']['full_name'] pull_number = payload['number'] pull_id = payload['pull_request']['id'] package_name = payload['pull_request']['base']['repo']['name'] target_branch = payload['pull_request']['base']['ref'] add_log(request, "mr.roboto", "Getting github repository.") github = request.registry.settings['github'] repository = github.get_repo(repo_name) pull = repository.get_pull(pull_number) pull_request_message = """Domo arigato.""" # Check local db for registered jobs pulls_db = request.registry.settings['pulls'] pull_info = pulls_db.get(pull_id) pull_request_message = "" # Check state of pull request ('open' or 'closed') if pull.state == "open": if pull_info is None: # Consider this a new pull. # Check to see which coredev branches (if any) use this package # branch. add_log(request, "mr.roboto", "Checking coredev branches.") jenkins_urls = [] for branch in COREDEV_BRANCHES_TO_CHECK: core_buildout = PloneCoreBuildout(branch) if core_buildout.get_package_branch(package_name) == target_branch: # TODO: Create job # jenkins_urls.append(job_url) pass if not jenkins_urls: # Coredev doesn't use this package or branch. Ignore return pull_request_message += "Thanks for your pull request!\n" # Add entry to db pull_info = pulls_db.set(pull_id, jenkins_urls, []) # Check contributors committers = dict([(a.committer.id, a.committer) for a in pull.get_commits()]).values() # Are there new committers? checked_committers = pull_info.seen_committers for committer in committers: if committer.login not in checked_committers: add_log(request, "mr.roboto", "Checking contributor rights for %s." % committer.login) # Check all new committers for Plone contributor rights if not github.is_core_contributor(committer.login): msg = """@%s, it looks like you haven't signed \ the Plone contributor agreement. You can find it at \ https://buildoutcoredev.readthedocs.org/en/latest/agreement.html\ . If you've already done so, let me know and I'll \ double-check.\n""" % committer.login pull_request_message += msg checked_committers.append(committer.login) pulls_db.set(pull_id, pull_info.jenkins_url, checked_committers) # TODO: Run jobs # Add a comment to the pull request. print pull_request_message pull.create_issue_comment(pull_request_message) else: if pull_info is not None: # Consider this a merged pull # TODO: Remove job from Jenkins # TODO: Remove entry from db. pass # Example payload Push # { # "action": "synchronize", # "number": 4, # "pull_request": { # "_links": { # "comments": { # "href": "https://api.github.com/repos/esteele/Products.Archetypes/issues/4/comments" # }, # "html": { # "href": "https://github.com/esteele/Products.Archetypes/pull/4" # }, # "issue": { # "href": "https://api.github.com/repos/esteele/Products.Archetypes/issues/4" # }, # "review_comments": { # "href": "https://api.github.com/repos/esteele/Products.Archetypes/pulls/4/comments" # }, # "self": { # "href": "https://api.github.com/repos/esteele/Products.Archetypes/pulls/4" # } # }, # "additions": 9, # "assignee": null, # "base": { # "label": "esteele:master", # "ref": "master", # "repo": { # "archive_url": "https://api.github.com/repos/esteele/Products.Archetypes/{archive_format}{/ref}", # "assignees_url": "https://api.github.com/repos/esteele/Products.Archetypes/assignees{/user}", # "blobs_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/blobs{/sha}", # "branches_url": "https://api.github.com/repos/esteele/Products.Archetypes/branches{/branch}", # "clone_url": "https://github.com/esteele/Products.Archetypes.git", # "collaborators_url": "https://api.github.com/repos/esteele/Products.Archetypes/collaborators{/collaborator}", # "comments_url": "https://api.github.com/repos/esteele/Products.Archetypes/comments{/number}", # "commits_url": "https://api.github.com/repos/esteele/Products.Archetypes/commits{/sha}", # "compare_url": "https://api.github.com/repos/esteele/Products.Archetypes/compare/{base}...{head}", # "contents_url": "https://api.github.com/repos/esteele/Products.Archetypes/contents/{+path}", # "contributors_url": "https://api.github.com/repos/esteele/Products.Archetypes/contributors", # "created_at": "2013-02-08T10:59:48Z", # "description": "None", # "downloads_url": "https://api.github.com/repos/esteele/Products.Archetypes/downloads", # "events_url": "https://api.github.com/repos/esteele/Products.Archetypes/events", # "fork": true, # "forks": 0, # "forks_count": 0, # "forks_url": "https://api.github.com/repos/esteele/Products.Archetypes/forks", # "full_name": "esteele/Products.Archetypes", # "git_commits_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/commits{/sha}", # "git_refs_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/refs{/sha}", # "git_tags_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/tags{/sha}", # "git_url": "git://github.com/esteele/Products.Archetypes.git", # "has_downloads": true, # "has_issues": false, # "has_wiki": false, # "homepage": "None", # "hooks_url": "https://api.github.com/repos/esteele/Products.Archetypes/hooks", # "html_url": "https://github.com/esteele/Products.Archetypes", # "id": 8092021, # "issue_comment_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/comments/{number}", # "issue_events_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/events{/number}", # "issues_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues{/number}", # "keys_url": "https://api.github.com/repos/esteele/Products.Archetypes/keys{/key_id}", # "labels_url": "https://api.github.com/repos/esteele/Products.Archetypes/labels{/name}", # "language": "Python", # "languages_url": "https://api.github.com/repos/esteele/Products.Archetypes/languages", # "merges_url": "https://api.github.com/repos/esteele/Products.Archetypes/merges", # "milestones_url": "https://api.github.com/repos/esteele/Products.Archetypes/milestones{/number}", # "mirror_url": null, # "name": "Products.Archetypes", # "notifications_url": "https://api.github.com/repos/esteele/Products.Archetypes/notifications{?since,all,participating}", # "open_issues": 1, # "open_issues_count": 1, # "owner": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # }, # "private": false, # "pulls_url": "https://api.github.com/repos/esteele/Products.Archetypes/pulls{/number}", # "pushed_at": "2013-02-08T15:32:16Z", # "size": 200, # "ssh_url": "[email protected]:esteele/Products.Archetypes.git", # "stargazers_url": "https://api.github.com/repos/esteele/Products.Archetypes/stargazers", # "statuses_url": "https://api.github.com/repos/esteele/Products.Archetypes/statuses/{sha}", # "subscribers_url": "https://api.github.com/repos/esteele/Products.Archetypes/subscribers", # "subscription_url": "https://api.github.com/repos/esteele/Products.Archetypes/subscription", # "svn_url": "https://github.com/esteele/Products.Archetypes", # "tags_url": "https://api.github.com/repos/esteele/Products.Archetypes/tags{/tag}", # "teams_url": "https://api.github.com/repos/esteele/Products.Archetypes/teams", # "trees_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/trees{/sha}", # "updated_at": "2013-02-08T15:32:16Z", # "url": "https://api.github.com/repos/esteele/Products.Archetypes", # "watchers": 0, # "watchers_count": 0 # }, # "sha": "55de5f3e09315513d6c976f21ac634cf81ac1248", # "user": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # } # }, # "body": "", # "changed_files": 1, # "closed_at": null, # "comments": 0, # "comments_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/4/comments", # "commits": 3, # "commits_url": "https://github.com/esteele/Products.Archetypes/pull/4/commits", # "created_at": "2013-02-08T14:40:56Z", # "deletions": 0, # "diff_url": "https://github.com/esteele/Products.Archetypes/pull/4.diff", # "head": { # "label": "esteele:push-test", # "ref": "push-test", # "repo": { # "archive_url": "https://api.github.com/repos/esteele/Products.Archetypes/{archive_format}{/ref}", # "assignees_url": "https://api.github.com/repos/esteele/Products.Archetypes/assignees{/user}", # "blobs_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/blobs{/sha}", # "branches_url": "https://api.github.com/repos/esteele/Products.Archetypes/branches{/branch}", # "clone_url": "https://github.com/esteele/Products.Archetypes.git", # "collaborators_url": "https://api.github.com/repos/esteele/Products.Archetypes/collaborators{/collaborator}", # "comments_url": "https://api.github.com/repos/esteele/Products.Archetypes/comments{/number}", # "commits_url": "https://api.github.com/repos/esteele/Products.Archetypes/commits{/sha}", # "compare_url": "https://api.github.com/repos/esteele/Products.Archetypes/compare/{base}...{head}", # "contents_url": "https://api.github.com/repos/esteele/Products.Archetypes/contents/{+path}", # "contributors_url": "https://api.github.com/repos/esteele/Products.Archetypes/contributors", # "created_at": "2013-02-08T10:59:48Z", # "description": "None", # "downloads_url": "https://api.github.com/repos/esteele/Products.Archetypes/downloads", # "events_url": "https://api.github.com/repos/esteele/Products.Archetypes/events", # "fork": true, # "forks": 0, # "forks_count": 0, # "forks_url": "https://api.github.com/repos/esteele/Products.Archetypes/forks", # "full_name": "esteele/Products.Archetypes", # "git_commits_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/commits{/sha}", # "git_refs_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/refs{/sha}", # "git_tags_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/tags{/sha}", # "git_url": "git://github.com/esteele/Products.Archetypes.git", # "has_downloads": true, # "has_issues": false, # "has_wiki": false, # "homepage": "None", # "hooks_url": "https://api.github.com/repos/esteele/Products.Archetypes/hooks", # "html_url": "https://github.com/esteele/Products.Archetypes", # "id": 8092021, # "issue_comment_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/comments/{number}", # "issue_events_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/events{/number}", # "issues_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues{/number}", # "keys_url": "https://api.github.com/repos/esteele/Products.Archetypes/keys{/key_id}", # "labels_url": "https://api.github.com/repos/esteele/Products.Archetypes/labels{/name}", # "language": "Python", # "languages_url": "https://api.github.com/repos/esteele/Products.Archetypes/languages", # "merges_url": "https://api.github.com/repos/esteele/Products.Archetypes/merges", # "milestones_url": "https://api.github.com/repos/esteele/Products.Archetypes/milestones{/number}", # "mirror_url": null, # "name": "Products.Archetypes", # "notifications_url": "https://api.github.com/repos/esteele/Products.Archetypes/notifications{?since,all,participating}", # "open_issues": 1, # "open_issues_count": 1, # "owner": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # }, # "private": false, # "pulls_url": "https://api.github.com/repos/esteele/Products.Archetypes/pulls{/number}", # "pushed_at": "2013-02-08T15:32:16Z", # "size": 200, # "ssh_url": "[email protected]:esteele/Products.Archetypes.git", # "stargazers_url": "https://api.github.com/repos/esteele/Products.Archetypes/stargazers", # "statuses_url": "https://api.github.com/repos/esteele/Products.Archetypes/statuses/{sha}", # "subscribers_url": "https://api.github.com/repos/esteele/Products.Archetypes/subscribers", # "subscription_url": "https://api.github.com/repos/esteele/Products.Archetypes/subscription", # "svn_url": "https://github.com/esteele/Products.Archetypes", # "tags_url": "https://api.github.com/repos/esteele/Products.Archetypes/tags{/tag}", # "teams_url": "https://api.github.com/repos/esteele/Products.Archetypes/teams", # "trees_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/trees{/sha}", # "updated_at": "2013-02-08T15:32:16Z", # "url": "https://api.github.com/repos/esteele/Products.Archetypes", # "watchers": 0, # "watchers_count": 0 # }, # "sha": "c1e4b19df405c834c7532a098c16e89c23cebb97", # "user": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # } # }, # "html_url": "https://github.com/esteele/Products.Archetypes/pull/4", # "id": 4056914, # "issue_url": "https://github.com/esteele/Products.Archetypes/issues/4", # "merge_commit_sha": "d4e5f736262659e7d41e97b2e8e9e08c09329023", # "mergeable": null, # "mergeable_state": "unknown", # "merged": false, # "merged_at": null, # "merged_by": null, # "milestone": null, # "number": 4, # "patch_url": "https://github.com/esteele/Products.Archetypes/pull/4.patch", # "review_comment_url": "/repos/esteele/Products.Archetypes/pulls/comments/{number}", # "review_comments": 0, # "review_comments_url": "https://github.com/esteele/Products.Archetypes/pull/4/comments", # "state": "open", # "title": "Test, please ignore.", # "updated_at": "2013-02-08T15:32:16Z", # "url": "https://api.github.com/repos/esteele/Products.Archetypes/pulls/4", # "user": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # } # }, # "repository": { # "archive_url": "https://api.github.com/repos/esteele/Products.Archetypes/{archive_format}{/ref}", # "assignees_url": "https://api.github.com/repos/esteele/Products.Archetypes/assignees{/user}", # "blobs_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/blobs{/sha}", # "branches_url": "https://api.github.com/repos/esteele/Products.Archetypes/branches{/branch}", # "clone_url": "https://github.com/esteele/Products.Archetypes.git", # "collaborators_url": "https://api.github.com/repos/esteele/Products.Archetypes/collaborators{/collaborator}", # "comments_url": "https://api.github.com/repos/esteele/Products.Archetypes/comments{/number}", # "commits_url": "https://api.github.com/repos/esteele/Products.Archetypes/commits{/sha}", # "compare_url": "https://api.github.com/repos/esteele/Products.Archetypes/compare/{base}...{head}", # "contents_url": "https://api.github.com/repos/esteele/Products.Archetypes/contents/{+path}", # "contributors_url": "https://api.github.com/repos/esteele/Products.Archetypes/contributors", # "created_at": "2013-02-08T10:59:48Z", # "description": "None", # "downloads_url": "https://api.github.com/repos/esteele/Products.Archetypes/downloads", # "events_url": "https://api.github.com/repos/esteele/Products.Archetypes/events", # "fork": true, # "forks": 0, # "forks_count": 0, # "forks_url": "https://api.github.com/repos/esteele/Products.Archetypes/forks", # "full_name": "esteele/Products.Archetypes", # "git_commits_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/commits{/sha}", # "git_refs_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/refs{/sha}", # "git_tags_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/tags{/sha}", # "git_url": "git://github.com/esteele/Products.Archetypes.git", # "has_downloads": true, # "has_issues": false, # "has_wiki": false, # "homepage": "None", # "hooks_url": "https://api.github.com/repos/esteele/Products.Archetypes/hooks", # "html_url": "https://github.com/esteele/Products.Archetypes", # "id": 8092021, # "issue_comment_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/comments/{number}", # "issue_events_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues/events{/number}", # "issues_url": "https://api.github.com/repos/esteele/Products.Archetypes/issues{/number}", # "keys_url": "https://api.github.com/repos/esteele/Products.Archetypes/keys{/key_id}", # "labels_url": "https://api.github.com/repos/esteele/Products.Archetypes/labels{/name}", # "language": "Python", # "languages_url": "https://api.github.com/repos/esteele/Products.Archetypes/languages", # "merges_url": "https://api.github.com/repos/esteele/Products.Archetypes/merges", # "milestones_url": "https://api.github.com/repos/esteele/Products.Archetypes/milestones{/number}", # "mirror_url": null, # "name": "Products.Archetypes", # "notifications_url": "https://api.github.com/repos/esteele/Products.Archetypes/notifications{?since,all,participating}", # "open_issues": 1, # "open_issues_count": 1, # "owner": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # }, # "private": false, # "pulls_url": "https://api.github.com/repos/esteele/Products.Archetypes/pulls{/number}", # "pushed_at": "2013-02-08T15:32:16Z", # "size": 200, # "ssh_url": "[email protected]:esteele/Products.Archetypes.git", # "stargazers_url": "https://api.github.com/repos/esteele/Products.Archetypes/stargazers", # "statuses_url": "https://api.github.com/repos/esteele/Products.Archetypes/statuses/{sha}", # "subscribers_url": "https://api.github.com/repos/esteele/Products.Archetypes/subscribers", # "subscription_url": "https://api.github.com/repos/esteele/Products.Archetypes/subscription", # "svn_url": "https://github.com/esteele/Products.Archetypes", # "tags_url": "https://api.github.com/repos/esteele/Products.Archetypes/tags{/tag}", # "teams_url": "https://api.github.com/repos/esteele/Products.Archetypes/teams", # "trees_url": "https://api.github.com/repos/esteele/Products.Archetypes/git/trees{/sha}", # "updated_at": "2013-02-08T15:32:16Z", # "url": "https://api.github.com/repos/esteele/Products.Archetypes", # "watchers": 0, # "watchers_count": 0 # }, # "sender": { # "avatar_url": "https://secure.gravatar.com/avatar/a25a9df6dcbd2c020989b6d479f4a00a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png", # "events_url": "https://api.github.com/users/esteele/events{/privacy}", # "followers_url": "https://api.github.com/users/esteele/followers", # "following_url": "https://api.github.com/users/esteele/following", # "gists_url": "https://api.github.com/users/esteele/gists{/gist_id}", # "gravatar_id": "a25a9df6dcbd2c020989b6d479f4a00a", # "id": 483999, # "login": "******", # "organizations_url": "https://api.github.com/users/esteele/orgs", # "received_events_url": "https://api.github.com/users/esteele/received_events", # "repos_url": "https://api.github.com/users/esteele/repos", # "starred_url": "https://api.github.com/users/esteele/starred{/owner}{/repo}", # "subscriptions_url": "https://api.github.com/users/esteele/subscriptions", # "type": "User", # "url": "https://api.github.com/users/esteele" # } # } # Example payload # { # "before": "5aef35982fb2d34e9d9d4502f6ede1072793222d", # "repository": { # "url": "http://github.com/defunkt/github", # "name": "github", # "description": "You're lookin' at it.", # "watchers": 5, # "forks": 2, # "private": 1, # "owner": { # "email": "*****@*****.**", # "name": "defunkt" # } # }, # "commits": [ # { # "id": "41a212ee83ca127e3c8cf465891ab7216a705f59", # "url": "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59", # "author": { # "email": "*****@*****.**", # "name": "Chris Wanstrath" # }, # "message": "okay i give in", # "timestamp": "2008-02-15T14:57:17-08:00", # "added": ["filepath.rb"] # }, # { # "id": "de8251ff97ee194a289832576287d6f8ad74e3d0", # "url": "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0", # "author": { # "email": "*****@*****.**", # "name": "Chris Wanstrath" # }, # "message": "update pricing a tad", # "timestamp": "2008-02-15T14:36:34-08:00" # } # ], # "after": "de8251ff97ee194a289832576287d6f8ad74e3d0", # "ref": "refs/heads/master" # }