internal/commands/get.go (65 lines of code) (raw):

package commands import ( "encoding/json" "fmt" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" "gitlab.com/gitlab-org/release-cli/internal/flags" "gitlab.com/gitlab-org/release-cli/internal/gitlab" ) // Get a release by tag name command func Get(log logrus.FieldLogger, httpClientFn httpClientFn) *cli.Command { return &cli.Command{ Name: "get", Usage: "Get a Release by tag name using GitLab's Releases API https://docs.gitlab.com/ee/api/releases/index.html#get-a-release-by-a-tag-name", Action: func(ctx *cli.Context) error { client, err := httpClientFn(ctx, log) if err != nil { return fmt.Errorf("http client: %w", err) } return getRelease(ctx, log, client) }, Subcommands: nil, Flags: []cli.Flag{ &cli.StringFlag{ Name: flags.TagName, Usage: "The Git tag the release is associated with", Required: true, EnvVars: []string{"CI_COMMIT_TAG"}, }, &cli.BoolFlag{ Name: flags.IncludeHTMLDescription, Usage: "If true, a response includes HTML rendered Markdown of the release description", Required: false, EnvVars: []string{"INCLUDE_HTML_DESCRIPTION"}, }, }, } } func getRelease(ctx *cli.Context, log logrus.FieldLogger, httpClient gitlab.HTTPClient) error { projectID := ctx.String(flags.ProjectID) serverURL := ctx.String(flags.ServerURL) jobToken := ctx.String(flags.JobToken) privateToken := ctx.String(flags.PrivateToken) tagName := ctx.String(flags.TagName) includeHTML := ctx.Bool(flags.IncludeHTMLDescription) l := log.WithFields(logrus.Fields{ "command": ctx.Command.Name, flags.ServerURL: serverURL, flags.ProjectID: projectID, flags.TagName: tagName, flags.IncludeHTMLDescription: includeHTML, }) l.Info("Getting release") gitlabClient, err := gitlab.New(serverURL, jobToken, privateToken, projectID, httpClient, log) if err != nil { return fmt.Errorf("create GitLab client: %w", err) } release, err := gitlabClient.GetRelease(ctx.Context, tagName, includeHTML) if err != nil { return fmt.Errorf("get release: %w", err) } if err := json.NewEncoder(ctx.App.Writer).Encode(release); err != nil { return fmt.Errorf("encode release response: %w", err) } return nil }