cmd: re-use existing ui library
Also, move CLI-only utils into `cmd` rather than the top-level package. Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
parent
bbdd2b394a
commit
49f0c0e149
@ -4,8 +4,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"dagger.cloud/go/cmd/dagger/ui"
|
||||||
"dagger.cloud/go/dagger"
|
"dagger.cloud/go/dagger"
|
||||||
"dagger.cloud/go/dagger/ui"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -18,14 +18,14 @@ var computeCmd = &cobra.Command{
|
|||||||
// FIXME: boot and bootdir should be config fields, not args
|
// FIXME: boot and bootdir should be config fields, not args
|
||||||
c, err := dagger.NewClient(ctx, "", "", args[0])
|
c, err := dagger.NewClient(ctx, "", "", args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ui.Fatal(err)
|
ui.FatalErr(err)
|
||||||
}
|
}
|
||||||
// FIXME: configure which config to compute (duh)
|
// FIXME: configure which config to compute (duh)
|
||||||
// FIXME: configure inputs
|
// FIXME: configure inputs
|
||||||
ui.Info("Running")
|
ui.Info("Running")
|
||||||
output, err := c.Compute(ctx)
|
output, err := c.Compute(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ui.Fatal(err)
|
ui.FatalErr(err)
|
||||||
}
|
}
|
||||||
ui.Info("Processing output")
|
ui.Info("Processing output")
|
||||||
fmt.Println(output.JSON())
|
fmt.Println(output.JSON())
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"dagger.cloud/go/dagger/ui"
|
"dagger.cloud/go/cmd/dagger/ui"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,6 +30,6 @@ func init() {
|
|||||||
|
|
||||||
func Execute() {
|
func Execute() {
|
||||||
if err := rootCmd.Execute(); err != nil {
|
if err := rootCmd.Execute(); err != nil {
|
||||||
ui.Fatal(err)
|
ui.FatalErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
144
cmd/dagger/ui/ui.go
Normal file
144
cmd/dagger/ui/ui.go
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
package ui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"hash/adler32"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"github.com/mitchellh/colorstring"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// Colorize is the main colorizer
|
||||||
|
Colorize = colorstring.Colorize{
|
||||||
|
Colors: colorstring.DefaultColors,
|
||||||
|
Reset: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Finfo prints an info message to w.
|
||||||
|
func Finfo(w io.Writer, msg string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(w, Colorize.Color("[bold][blue]info[reset] %s\n"), fmt.Sprintf(msg, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Info prints an info message.
|
||||||
|
func Info(msg string, args ...interface{}) {
|
||||||
|
Finfo(os.Stdout, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fverbose prints a verbose message to w.
|
||||||
|
func Fverbose(w io.Writer, msg string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(w, Colorize.Color("[dim]%s\n"), fmt.Sprintf(msg, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verbose prints a verbose message.
|
||||||
|
func Verbose(msg string, args ...interface{}) {
|
||||||
|
Fverbose(os.Stdout, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fsuccess prints a success message to w.
|
||||||
|
func Fsuccess(w io.Writer, msg string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(w, Colorize.Color("[bold][green]success[reset] %s\n"), fmt.Sprintf(msg, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Success prints a success message.
|
||||||
|
func Success(msg string, args ...interface{}) {
|
||||||
|
Fsuccess(os.Stdout, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fwrror prints an error message to w.
|
||||||
|
func Ferror(w io.Writer, msg string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(w, Colorize.Color("[bold][red]error[reset] %s\n"), fmt.Sprintf(msg, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error prints an error message.
|
||||||
|
func Error(msg string, args ...interface{}) {
|
||||||
|
Ferror(os.Stdout, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fwarning prints a warning message to w.
|
||||||
|
func Fwarning(w io.Writer, msg string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(os.Stderr, Colorize.Color("[bold][yellow]warning[reset] %s\n"), fmt.Sprintf(msg, args...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warning prints a warning message.
|
||||||
|
func Warning(msg string, args ...interface{}) {
|
||||||
|
Fwarning(os.Stdout, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ffatal prints an error message to w and exits.
|
||||||
|
func Ffatal(w io.Writer, msg string, args ...interface{}) {
|
||||||
|
fmt.Fprintf(w, Colorize.Color("[bold][red]fatal[reset] %s\n"), fmt.Sprintf(msg, args...))
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fatal prints an error message and exits.
|
||||||
|
func Fatal(msg string, args ...interface{}) {
|
||||||
|
Ffatal(os.Stderr, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FfatalErr prints an error object to w and exits.
|
||||||
|
func FfatalErr(w io.Writer, err error) {
|
||||||
|
Ffatal(w, "%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FatalErr prints an error object and exits.
|
||||||
|
func FatalErr(err error) {
|
||||||
|
FfatalErr(os.Stderr, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Small returns a `small` colored string.
|
||||||
|
func Small(msg string) string {
|
||||||
|
return Colorize.Color("[dim]" + msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Primary returns a `primary` colored string.
|
||||||
|
func Primary(msg string) string {
|
||||||
|
return Colorize.Color("[light_green]" + msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Highlight returns a `highlighted` colored string.
|
||||||
|
func Highlight(msg string) string {
|
||||||
|
return Colorize.Color("[cyan]" + msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Truncate truncates a string to the given length
|
||||||
|
func Truncate(msg string, length int) string {
|
||||||
|
for utf8.RuneCountInString(msg) > length {
|
||||||
|
msg = msg[0:len(msg)-4] + "…"
|
||||||
|
}
|
||||||
|
return msg
|
||||||
|
}
|
||||||
|
|
||||||
|
// HashColor returns a consistent color for a given string
|
||||||
|
func HashColor(text string) string {
|
||||||
|
colors := []string{
|
||||||
|
"green",
|
||||||
|
"light_green",
|
||||||
|
"light_blue",
|
||||||
|
"blue",
|
||||||
|
"magenta",
|
||||||
|
"light_magenta",
|
||||||
|
"light_yellow",
|
||||||
|
"cyan",
|
||||||
|
"light_cyan",
|
||||||
|
"red",
|
||||||
|
"light_red",
|
||||||
|
}
|
||||||
|
h := adler32.Checksum([]byte(text))
|
||||||
|
return colors[int(h)%len(colors)]
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrintLegend prints a demo of the ui functions
|
||||||
|
func PrintLegend() {
|
||||||
|
Info("info message")
|
||||||
|
Success("success message")
|
||||||
|
Error("error message")
|
||||||
|
Warning("warning message")
|
||||||
|
Verbose("verbose message")
|
||||||
|
fmt.Printf("this is %s\n", Small("small"))
|
||||||
|
fmt.Printf("this is %s\n", Primary("primary"))
|
||||||
|
fmt.Printf("this is a %s\n", Highlight("highlight"))
|
||||||
|
}
|
@ -1,26 +0,0 @@
|
|||||||
package ui
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Fatalf(msg string, args ...interface{}) {
|
|
||||||
if !strings.HasSuffix(msg, "\n") {
|
|
||||||
msg += "\n"
|
|
||||||
}
|
|
||||||
fmt.Fprintf(os.Stderr, msg, args...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fatal(msg interface{}) {
|
|
||||||
Fatalf("%s\n", msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Info(msg string, args ...interface{}) {
|
|
||||||
if !strings.HasSuffix(msg, "\n") {
|
|
||||||
msg += "\n"
|
|
||||||
}
|
|
||||||
fmt.Fprintf(os.Stderr, "[info] "+msg, args...)
|
|
||||||
}
|
|
1
go.mod
1
go.mod
@ -7,6 +7,7 @@ require (
|
|||||||
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db
|
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db
|
||||||
github.com/containerd/console v1.0.1
|
github.com/containerd/console v1.0.1
|
||||||
github.com/emicklei/proto v1.9.0 // indirect
|
github.com/emicklei/proto v1.9.0 // indirect
|
||||||
|
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db
|
||||||
github.com/moby/buildkit v0.8.1
|
github.com/moby/buildkit v0.8.1
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/spf13/cobra v1.0.0
|
github.com/spf13/cobra v1.0.0
|
||||||
|
2
go.sum
2
go.sum
@ -615,6 +615,8 @@ github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88J
|
|||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||||
|
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
|
||||||
|
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
|
||||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
|
github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
|
||||||
|
Reference in New Issue
Block a user