From 023e8db8cbba83d90a62e2e546a96d3dcecbbce4 Mon Sep 17 00:00:00 2001 From: Will Norris Date: Mon, 29 Jul 2013 13:09:35 -0700 Subject: [PATCH] initial support for post receive hooks This provides the structs needed to unmarshal the "old-style" post receive hooks that are sent for push events. Because the formats differ in sometimes subtle ways from the rest of the API, some types are duplicated. I suspect we may also need to duplicate the Repository type at some point, since there are some differences there as well. For now this is just using the normal Repository type. Thanks to both @wlynch92 and @imjasonh who kept pushing on this and provided the original patches that this is based on. --- github/webhooks.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 github/webhooks.go diff --git a/github/webhooks.go b/github/webhooks.go new file mode 100644 index 0000000..dfe7e31 --- /dev/null +++ b/github/webhooks.go @@ -0,0 +1,51 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import "time" + +// WebHookPayload represents the data that is received from GitHub when a push +// event hook is triggered. The format of these payloads pre-date most of the +// GitHub v3 API, so there are lots of minor incompatibilities with the types +// defined in the rest of the API. Therefore, several types are duplicated +// here to account for these differences. +// +// GitHub API docs: https://help.github.com/articles/post-receive-hooks +type WebHookPayload struct { + After string `json:"after,omitempty"` + Before string `json:"before,omitempty"` + Commits []WebHookCommit `json:"commits,omitempty"` + Compare string `json:"compare,omitempty"` + Created bool `json:"created,omitempty"` + Deleted bool `json:"deleted,omitempty"` + Forced bool `json:"forced,omitempty"` + HeadCommit *WebHookCommit `json:"head_commit,omitempty"` + Pusher *User `json:"pusher,omitempty"` + Ref string `json:"ref,omitempty"` + Repo *Repository `json:"repository,omitempty"` +} + +// WebHookCommit represents the commit variant we receive from GitHub in a +// WebHookPayload. +type WebHookCommit struct { + Added []string `json:"added,omitempty"` + Author WebHookAuthor `json:"author,omitempty"` + Committer WebHookAuthor `json:"committer,omitempty"` + Distinct bool `json:"distinct,omitempty"` + ID string `json:"id,omitempty"` + Message string `json:"message,omitempty"` + Modified []string `json:"modified,omitempty"` + Removed []string `json:"removed,omitempty"` + Timestamp *time.Time `json:"timestamp,omitempty"` +} + +// WebHookAuthor represents the author or committer of a commit, as specified +// in a WebHookCommit. The commit author may not correspond to a GitHub User. +type WebHookAuthor struct { + Email string `json:"email,omitempty"` + Name string `json:"name,omitempty"` + Username string `json:"username,omitempty"` +}