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 }