Skip to content

Commit 9ef1791

Browse files
committed
Provide machine-readable release view output
1 parent d0d9cc2 commit 9ef1791

File tree

1 file changed

+46
-11
lines changed

1 file changed

+46
-11
lines changed

pkg/cmd/release/view/view.go

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package view
22

33
import (
44
"fmt"
5+
"io"
56
"net/http"
67
"time"
78

@@ -74,28 +75,44 @@ func viewRun(opts *ViewOptions) error {
7475
}
7576
}
7677

77-
iofmt := opts.IO.ColorScheme()
78-
fmt.Fprintf(opts.IO.Out, "%s\n", iofmt.Bold(release.TagName))
78+
if opts.IO.IsStdoutTTY() {
79+
if err := renderReleaseTTY(opts.IO, release); err != nil {
80+
return err
81+
}
82+
} else {
83+
if err := renderReleasePlain(opts.IO.Out, release); err != nil {
84+
return err
85+
}
86+
}
87+
88+
return nil
89+
}
90+
91+
func renderReleaseTTY(io *iostreams.IOStreams, release *shared.Release) error {
92+
iofmt := io.ColorScheme()
93+
w := io.Out
94+
95+
fmt.Fprintf(w, "%s\n", iofmt.Bold(release.TagName))
7996
if release.IsDraft {
80-
fmt.Fprintf(opts.IO.Out, "%s • ", iofmt.Red("Draft"))
97+
fmt.Fprintf(w, "%s • ", iofmt.Red("Draft"))
8198
} else if release.IsPrerelease {
82-
fmt.Fprintf(opts.IO.Out, "%s • ", iofmt.Yellow("Pre-release"))
99+
fmt.Fprintf(w, "%s • ", iofmt.Yellow("Pre-release"))
83100
}
84101
if release.IsDraft {
85-
fmt.Fprintf(opts.IO.Out, "%s\n", iofmt.Gray(fmt.Sprintf("%s created this %s", release.Author.Login, utils.FuzzyAgo(time.Since(release.CreatedAt)))))
102+
fmt.Fprintf(w, "%s\n", iofmt.Gray(fmt.Sprintf("%s created this %s", release.Author.Login, utils.FuzzyAgo(time.Since(release.CreatedAt)))))
86103
} else {
87-
fmt.Fprintf(opts.IO.Out, "%s\n", iofmt.Gray(fmt.Sprintf("%s released this %s", release.Author.Login, utils.FuzzyAgo(time.Since(release.PublishedAt)))))
104+
fmt.Fprintf(w, "%s\n", iofmt.Gray(fmt.Sprintf("%s released this %s", release.Author.Login, utils.FuzzyAgo(time.Since(release.PublishedAt)))))
88105
}
89106

90107
renderedDescription, err := utils.RenderMarkdown(release.Body)
91108
if err != nil {
92109
return err
93110
}
94-
fmt.Fprintln(opts.IO.Out, renderedDescription)
111+
fmt.Fprintln(w, renderedDescription)
95112

96113
if len(release.Assets) > 0 {
97-
fmt.Fprintf(opts.IO.Out, "%s\n", iofmt.Bold("Assets"))
98-
table := utils.NewTablePrinter(opts.IO)
114+
fmt.Fprintf(w, "%s\n", iofmt.Bold("Assets"))
115+
table := utils.NewTablePrinter(io)
99116
for _, a := range release.Assets {
100117
table.AddField(a.Name, nil, nil)
101118
table.AddField(humanFileSize(a.Size), nil, nil)
@@ -105,11 +122,29 @@ func viewRun(opts *ViewOptions) error {
105122
if err != nil {
106123
return err
107124
}
108-
fmt.Fprint(opts.IO.Out, "\n")
125+
fmt.Fprint(w, "\n")
109126
}
110127

111-
fmt.Fprintf(opts.IO.Out, "%s\n", iofmt.Gray(fmt.Sprintf("View on GitHub: %s", release.HTMLURL)))
128+
fmt.Fprintf(w, "%s\n", iofmt.Gray(fmt.Sprintf("View on GitHub: %s", release.HTMLURL)))
129+
return nil
130+
}
112131

132+
func renderReleasePlain(w io.Writer, release *shared.Release) error {
133+
fmt.Fprintf(w, "title:\t%s\n", release.Name)
134+
fmt.Fprintf(w, "tag:\t%s\n", release.TagName)
135+
fmt.Fprintf(w, "draft:\t%v\n", release.IsDraft)
136+
fmt.Fprintf(w, "prerelease:\t%v\n", release.IsPrerelease)
137+
fmt.Fprintf(w, "author:\t%s\n", release.Author.Login)
138+
fmt.Fprintf(w, "created:\t%s\n", release.CreatedAt)
139+
if !release.IsDraft {
140+
fmt.Fprintf(w, "published:\t%s\n", release.PublishedAt)
141+
}
142+
fmt.Fprintf(w, "url:\t%s\n", release.HTMLURL)
143+
for _, a := range release.Assets {
144+
fmt.Fprintf(w, "asset:\t%s\n", a.Name)
145+
}
146+
fmt.Fprint(w, "--\n")
147+
fmt.Fprint(w, release.Body)
113148
return nil
114149
}
115150

0 commit comments

Comments
 (0)