From 7a82ea7c1e10c0a53f410c726012de5a594ab090 Mon Sep 17 00:00:00 2001 From: Janos Guljas Date: Wed, 30 Nov 2022 16:33:48 +0100 Subject: [PATCH] Add support for the latest release endpoint --- README.md | 1 + releases.go | 17 +++++++++++++++++ releases_test.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/README.md b/README.md index 07b05b4..bee0bcb 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ This client implements all NewReleases API features. - Delete project - List projects releases - Get project release +- Get latest non-excluded project release - Get project release note - Get tracked providers - Get added Slack Channels diff --git a/releases.go b/releases.go index 3fbe8f3..5da286c 100644 --- a/releases.go +++ b/releases.go @@ -76,6 +76,23 @@ func (s *ReleasesService) get(ctx context.Context, projectRef, version string) ( return release, err } +// GetLatestByProjectID returns the latest non-excluded version release for a project referenced by +// its ID. +func (s *ReleasesService) GetLatestByProjectID(ctx context.Context, projectID string) (release *Release, err error) { + return s.getLatest(ctx, projectID) +} + +// GetLatestByProjectName returns the latest non-excluded version release for a project referenced +// by its provider and name. +func (s *ReleasesService) GetLatestByProjectName(ctx context.Context, provider, projectName string) (release *Release, err error) { + return s.getLatest(ctx, provider+"/"+projectName) +} + +func (s *ReleasesService) getLatest(ctx context.Context, projectRef string) (release *Release, err error) { + err = s.client.request(ctx, http.MethodGet, "v1/projects/"+projectRef+"/latest-release", nil, &release) + return release, err +} + // ReleaseNote holds information about an additional note for a specific // version. type ReleaseNote struct { diff --git a/releases_test.go b/releases_test.go index 0eeb206..5616a14 100644 --- a/releases_test.go +++ b/releases_test.go @@ -153,6 +153,34 @@ func TestReleasesService_GetByProjectName(t *testing.T) { assertEqual(t, "", got, releasesServiceGetWant) } +func TestReleasesService_GetLatestByProjectID(t *testing.T) { + client, mux, _, teardown := newClient(t, "") + defer teardown() + + mux.HandleFunc("/v1/projects/8wdvh4w9bhsvzclz4ynaqpcpvg/latest-release", requireMethod("GET", newStaticHandler(releasesServiceGet))) + + got, err := client.Releases.GetLatestByProjectID(context.Background(), "8wdvh4w9bhsvzclz4ynaqpcpvg") + if err != nil { + t.Fatal(err) + } + + assertEqual(t, "", got, releasesServiceGetWant) +} + +func TestReleasesService_GetLatestByProjectName(t *testing.T) { + client, mux, _, teardown := newClient(t, "") + defer teardown() + + mux.HandleFunc("/v1/projects/github/nodejs/node/latest-release", requireMethod("GET", newStaticHandler(releasesServiceGet))) + + got, err := client.Releases.GetLatestByProjectName(context.Background(), "github", "nodejs/node") + if err != nil { + t.Fatal(err) + } + + assertEqual(t, "", got, releasesServiceGetWant) +} + var ( releasesServiceGet = ` {