From 9829a4dc848a3d6444b265838e4e513a2495a4b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Tue, 25 Aug 2020 20:29:24 +0200 Subject: [PATCH] Update `release list` output to contain badges --- pkg/cmd/release/list/http.go | 1 + pkg/cmd/release/list/list.go | 42 +++++++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/pkg/cmd/release/list/http.go b/pkg/cmd/release/list/http.go index 778256ed7..763963ff1 100644 --- a/pkg/cmd/release/list/http.go +++ b/pkg/cmd/release/list/http.go @@ -16,6 +16,7 @@ type Release struct { TagName string IsDraft bool IsPrerelease bool + CreatedAt time.Time PublishedAt time.Time } diff --git a/pkg/cmd/release/list/list.go b/pkg/cmd/release/list/list.go index 61a9c097a..b2e1b88ff 100644 --- a/pkg/cmd/release/list/list.go +++ b/pkg/cmd/release/list/list.go @@ -1,6 +1,7 @@ package list import ( + "fmt" "net/http" "time" @@ -64,10 +65,45 @@ func listRun(opts *ListOptions) error { now := time.Now() table := utils.NewTablePrinter(opts.IO) + iofmt := opts.IO.ColorScheme() + seenLatest := false for _, rel := range releases { - table.AddField(rel.TagName, nil, nil) - table.AddField(text.ReplaceExcessiveWhitespace(rel.Name), nil, nil) - table.AddField(utils.FuzzyAgo(now.Sub(rel.PublishedAt)), nil, nil) + title := text.ReplaceExcessiveWhitespace(rel.Name) + if title == "" { + title = rel.TagName + } + table.AddField(title, nil, nil) + + badge := "" + var badgeColor func(string) string + if !rel.IsDraft && !rel.IsPrerelease && !seenLatest { + badge = "Latest" + badgeColor = iofmt.Green + seenLatest = true + } else if rel.IsDraft { + badge = "Draft" + badgeColor = iofmt.Red + } else if rel.IsPrerelease { + badge = "Pre-release" + badgeColor = iofmt.Yellow + } + table.AddField(badge, nil, badgeColor) + + tagName := rel.TagName + if table.IsTTY() { + tagName = fmt.Sprintf("(%s)", tagName) + } + table.AddField(tagName, nil, nil) + + pubDate := rel.PublishedAt + if rel.PublishedAt.IsZero() { + pubDate = rel.CreatedAt + } + publishedAt := pubDate.String() + if table.IsTTY() { + publishedAt = utils.FuzzyAgo(now.Sub(pubDate)) + } + table.AddField(publishedAt, nil, iofmt.Gray) table.EndRow() } err = table.Render()