github.com/kubeshop/testkube@v1.17.23/pkg/ui/ui.go (about) 1 // simple ui - TODO use something more sophisticated :) 2 package ui 3 4 import ( 5 "io" 6 "os" 7 8 "k8s.io/apimachinery/pkg/runtime/schema" 9 10 "github.com/kubeshop/testkube/internal/common" 11 ) 12 13 const ( 14 Separator = "separator" 15 ) 16 17 var ( 18 uiOut = NewStdoutUI(Verbose) 19 uiErr = NewStderrUI(Verbose) 20 ui = uiOut 21 ) 22 23 func NewUI(verbose bool, writer io.Writer) *UI { 24 return &UI{ 25 Verbose: verbose, 26 Writer: writer, 27 } 28 } 29 30 func NewStdoutUI(verbose bool) *UI { 31 return &UI{ 32 Verbose: verbose, 33 Writer: os.Stdout, 34 } 35 } 36 37 func NewStderrUI(verbose bool) *UI { 38 return &UI{ 39 Verbose: verbose, 40 Writer: os.Stderr, 41 } 42 } 43 44 type UI struct { 45 Verbose bool 46 Writer io.Writer 47 } 48 49 func SetVerbose(verbose bool) { ui.Verbose = verbose } 50 func IsVerbose() bool { return ui.Verbose } 51 func ExitOnError(item string, errors ...error) { ui.ExitOnError(item, errors...) } 52 func PrintOnError(item string, errors ...error) { ui.PrintOnError(item, errors...) } 53 func WarnOnError(item string, errors ...error) { ui.WarnOnError(item, errors...) } 54 func Logo() { ui.Logo() } 55 func LogoNoColor() { ui.LogoNoColor() } 56 func NL(amount ...int) { ui.NL(amount...) } 57 func H1(message string) { ui.H1(message) } 58 func H2(message string) { ui.H2(message) } 59 func Paragraph(message string) { ui.Paragraph(message) } 60 func Success(message string, subMessages ...string) { ui.Success(message, subMessages...) } 61 func SuccessAndExit(message string, subMessages ...string) { 62 ui.SuccessAndExit(message, subMessages...) 63 } 64 func Warn(message string, subMessages ...string) { ui.Warn(message, subMessages...) } 65 func Alert(message string, subMessages ...string) { ui.Alert(message, subMessages...) } 66 func LogLine(message string) { ui.LogLine(message) } 67 func Debug(message string, subMessages ...string) { ui.Debug(message, subMessages...) } 68 func Info(message string, subMessages ...string) { ui.Info(message, subMessages...) } 69 func Link(message string, subMessages ...string) { ui.Link(message, subMessages...) } 70 func ExecutionLink(message string, subMessages ...string) { ui.ExecutionLink(message, subMessages...) } 71 func Err(err error) { ui.Err(err) } 72 func Errf(err string, params ...interface{}) { ui.Errf(err, params...) } 73 func Fail(err error) { ui.Fail(err) } 74 func Failf(err string, params ...interface{}) { ui.Failf(err, params...) } 75 func CommandOutput(output []byte, command string, params ...string) { 76 ui.CommandOutput(output, command, params...) 77 } 78 func Print(message string, subMessages ...string) { ui.Print(message, subMessages...) } 79 func Printf(format string, data ...any) { ui.Printf(format, data...) } 80 func PrintDot() { ui.PrintDot() } 81 func PrintEnabled(message string, subMessages ...string) { ui.PrintEnabled(message, subMessages...) } 82 func PrintDisabled(message string, subMessages ...string) { ui.PrintDisabled(message, subMessages...) } 83 func Medal() { ui.Medal() } 84 func Completed(message string, subMessages ...string) { ui.Completed(message, subMessages...) } 85 func GroupCompleted(main string, sub ...string) { ui.GroupCompleted(main, sub...) } 86 func InfoGrid(table map[string]string) { ui.InfoGrid(table) } 87 func Properties(table [][]string) { ui.Properties(table) } 88 func Vector(table []string) { ui.Vector(table) } 89 func ShellCommand(title string, commands ...string) { ui.ShellCommand(title, commands...) } 90 func Table(tableData TableData, writer io.Writer) { ui.Table(tableData, writer) } 91 func JSONTable(tableData TableData, writer io.Writer) error { return ui.JSONTable(tableData, writer) } 92 func NewArrayTable(a [][]string) ArrayTable { return ui.NewArrayTable(a) } 93 func PrintArrayTable(a [][]string) { ui.PrintArrayTable(a) } 94 func Confirm(message string) bool { return ui.Confirm(message) } 95 func Select(title string, options []string) string { return ui.Select(title, options) } 96 func TextInput(message string) string { return ui.TextInput(message) } 97 98 func PrintCRD[T interface{}](cr T, kind string, groupVersion schema.GroupVersion) { 99 PrintCRDs([]T{cr}, kind, groupVersion) 100 } 101 102 func PrintCRDs[T interface{}](crs []T, kind string, groupVersion schema.GroupVersion) { 103 bytes, err := common.SerializeCRDs(crs, common.SerializeOptions{ 104 OmitCreationTimestamp: true, 105 CleanMeta: true, 106 Kind: kind, 107 GroupVersion: &groupVersion, 108 }) 109 ui.ExitOnError("serializing the crds", err) 110 _, _ = os.Stdout.Write(bytes) 111 } 112 113 func UseStdout() { ui = uiOut } 114 func UseStderr() { ui = uiErr }