From ef772c929d48d428ea429d82d4e2d00ee2617bfd Mon Sep 17 00:00:00 2001 From: Craig Peterson Date: Fri, 22 May 2015 13:01:17 -0600 Subject: [PATCH] Adding GetLatestReleast endpoint --- github/repos_releases.go | 19 +++++++++++++++++++ github/repos_releases_test.go | 20 ++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/github/repos_releases.go b/github/repos_releases.go index 1400114..7496353 100644 --- a/github/repos_releases.go +++ b/github/repos_releases.go @@ -99,6 +99,25 @@ func (s *RepositoriesService) GetRelease(owner, repo string, id int) (*Repositor return release, resp, err } +// GetLatestRelease fetches the latest published release for the repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-the-latest-release +func (s *RepositoriesService) GetLatestRelease(owner, repo string) (*RepositoryRelease, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/releases/latest", owner, repo) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + release := new(RepositoryRelease) + resp, err := s.client.Do(req, release) + if err != nil { + return nil, resp, err + } + return release, resp, err +} + // CreateRelease adds a new release for a repository. // // GitHub API docs : http://developer.github.com/v3/repos/releases/#create-a-release diff --git a/github/repos_releases_test.go b/github/repos_releases_test.go index 17c6702..2e670a0 100644 --- a/github/repos_releases_test.go +++ b/github/repos_releases_test.go @@ -55,6 +55,26 @@ func TestRepositoriesService_GetRelease(t *testing.T) { } } +func TestRepositoriesService_GetLatestRelease(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/releases/latest", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{"id":3}`) + }) + + release, resp, err := client.Repositories.GetLatestRelease("o", "r") + if err != nil { + t.Errorf("Repositories.GetLatestRelease returned error: %v\n%v", err, resp.Body) + } + + want := &RepositoryRelease{ID: Int(3)} + if !reflect.DeepEqual(release, want) { + t.Errorf("Repositories.GetLatestRelease returned %+v, want %+v", release, want) + } +} + func TestRepositoriesService_CreateRelease(t *testing.T) { setup() defer teardown()