commands/release/list/release_list.go (78 lines of code) (raw):

package list import ( "fmt" "gitlab.com/gitlab-org/cli/api" "gitlab.com/gitlab-org/cli/commands/cmdutils" "gitlab.com/gitlab-org/cli/commands/release/releaseutils" "gitlab.com/gitlab-org/cli/pkg/utils" "github.com/spf13/cobra" gitlab "gitlab.com/gitlab-org/api/client-go" ) func NewCmdReleaseList(f *cmdutils.Factory) *cobra.Command { releaseListCmd := &cobra.Command{ Use: "list [flags]", Short: `List releases in a repository.`, Long: ``, Aliases: []string{"ls"}, Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { return listReleases(f, cmd) }, } releaseListCmd.Flags().IntP("page", "p", 1, "Page number.") releaseListCmd.Flags().IntP("per-page", "P", 30, "Number of items to list per page.") releaseListCmd.Flags().StringP("tag", "t", "", "Filter releases by tag <name>.") // deprecate in favour of the `release view` command _ = releaseListCmd.Flags().MarkDeprecated("tag", "Use `glab release view <tag>` instead.") // make it hidden but still accessible // TODO: completely remove before a major release (v2.0.0+) _ = releaseListCmd.Flags().MarkHidden("tag") return releaseListCmd } func listReleases(factory *cmdutils.Factory, cmd *cobra.Command) error { l := &gitlab.ListReleasesOptions{} page, _ := cmd.Flags().GetInt("page") l.Page = page perPage, _ := cmd.Flags().GetInt("per-page") l.PerPage = perPage tag, err := cmd.Flags().GetString("tag") if err != nil { return err } apiClient, err := factory.HttpClient() if err != nil { return err } repo, err := factory.BaseRepo() if err != nil { return err } if tag != "" { release, err := api.GetRelease(apiClient, repo.FullName(), tag) if err != nil { return err } cfg, _ := factory.Config() glamourStyle, _ := cfg.Get(repo.RepoHost(), "glamour_style") factory.IO.ResolveBackgroundColor(glamourStyle) err = factory.IO.StartPager() if err != nil { return err } defer factory.IO.StopPager() fmt.Fprintln(factory.IO.StdOut, releaseutils.DisplayRelease(factory.IO, release, repo)) } else { releases, err := api.ListReleases(apiClient, repo.FullName(), l) if err != nil { return err } title := utils.NewListTitle("release") title.RepoName = repo.FullName() title.Page = 0 title.CurrentPageTotal = len(releases) err = factory.IO.StartPager() if err != nil { return err } defer factory.IO.StopPager() fmt.Fprintf(factory.IO.StdOut, "%s\n%s\n", title.Describe(), releaseutils.DisplayAllReleases(factory.IO, releases, repo.FullName())) } return nil }