diff --git a/VERSION b/VERSION index fe679b0..7b52f5e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.34.12 +0.35.0 diff --git a/pkg/codefresh/cli_releases.go b/pkg/codefresh/cli_releases.go new file mode 100644 index 0000000..ee7406f --- /dev/null +++ b/pkg/codefresh/cli_releases.go @@ -0,0 +1,51 @@ +package codefresh + +import ( + "context" + "fmt" +) + +type ( + ICliReleasesAPI interface { + GetLatest(ctx context.Context) (string, error) + } + + CliReleases struct { + codefresh *codefresh + } + + graphQlGetLatestReleaseResponse struct { + Data struct { + LatestCliRelease string + } + Errors []graphqlError + } +) + +func newCliReleasesAPI(codefresh *codefresh) ICliReleasesAPI { + return &CliReleases{codefresh: codefresh} +} + +func (releases *CliReleases) GetLatest(ctx context.Context) (string, error) { + jsonData := map[string]interface{}{ + "query": `{ + latestCliRelease + }`, + } + + res := graphQlGetLatestReleaseResponse{} + err := releases.codefresh.graphqlAPI(ctx, jsonData, &res) + if err != nil { + return "", fmt.Errorf("failed making a graphql API call to runtime: %w", err) + } + + if len(res.Errors) > 0 { + return "", graphqlErrorResponse{errors: res.Errors} + } + + if res.Data.LatestCliRelease == "" { + return "", fmt.Errorf("failed getting latest release") + } + + return res.Data.LatestCliRelease, nil +} diff --git a/pkg/codefresh/codefresh.go b/pkg/codefresh/codefresh.go index 516fddf..cc2a468 100644 --- a/pkg/codefresh/codefresh.go +++ b/pkg/codefresh/codefresh.go @@ -38,6 +38,7 @@ type ( Component() IComponentAPI Workflow() IWorkflowV2API Pipeline() IPipelineV2API + CliReleases() ICliReleasesAPI } ) @@ -118,6 +119,10 @@ func (c *codefresh) Pipeline() IPipelineV2API { return newPipelineV2API(c) } +func (c *codefresh) CliReleases() ICliReleasesAPI { + return newCliReleasesAPI(c) +} + func (c *codefresh) requestAPI(opt *requestOptions) (*http.Response, error) { return c.requestAPIWithContext(context.Background(), opt) }