github.com/kubeshop/testkube@v1.17.23/pkg/ui/printers.go (about) 1 package ui 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 "github.com/pterm/pterm" 9 ) 10 11 var ( 12 h1 = pterm.DefaultHeader.WithBackgroundStyle(pterm.NewStyle(pterm.BgDefault, pterm.Bold)).WithTextStyle(pterm.NewStyle(pterm.FgLightMagenta)).WithMargin(0) 13 h2 = pterm.DefaultHeader.WithBackgroundStyle(pterm.NewStyle(pterm.BgDefault, pterm.Bold)).WithTextStyle(pterm.NewStyle(pterm.FgLightGreen)).WithMargin(0) 14 paragraph = pterm.DefaultParagraph.WithMaxWidth(100) 15 ) 16 17 // H1 prints h1 like header 18 func (ui *UI) H1(text string) { 19 h1.WithWriter(ui.Writer).Println(text) 20 } 21 22 // H1 prints h2 like header 23 func (ui *UI) H2(text string) { 24 h2.WithWriter(ui.Writer).Println(text) 25 } 26 27 func (ui *UI) Paragraph(text string) { 28 paragraph.WithWriter(ui.Writer).Println(text) 29 } 30 31 func (ui *UI) NL(amount ...int) { 32 if len(amount) > 0 && amount[0] > 0 { 33 for i := 0; i < amount[0]-1; i++ { 34 fmt.Fprintln(ui.Writer) 35 } 36 } 37 fmt.Fprintln(ui.Writer) 38 } 39 40 // Success shows success in terminal 41 func (ui *UI) Success(message string, subMessages ...string) { 42 fmt.Fprintf(ui.Writer, "%s", LightYellow(message)) 43 for _, sub := range subMessages { 44 fmt.Fprintf(ui.Writer, " %s", LightCyan(sub)) 45 } 46 fmt.Fprintf(ui.Writer, " "+IconMedal) 47 fmt.Fprintln(ui.Writer) 48 } 49 50 // SuccessAndExit shows success in terminal and exit 51 func (ui *UI) SuccessAndExit(message string, subMessages ...string) { 52 ui.Success(message, subMessages...) 53 os.Exit(0) 54 } 55 56 // Warn shows warning in terminal 57 func (ui *UI) Warn(message string, subMessages ...string) { 58 fmt.Fprintf(ui.Writer, "%s", LightYellow(message)) 59 for _, sub := range subMessages { 60 fmt.Fprintf(ui.Writer, " %s", LightCyan(sub)) 61 } 62 fmt.Fprintln(ui.Writer) 63 } 64 65 func (ui *UI) Alert(message string, subMessages ...string) { 66 fmt.Fprintf(ui.Writer, "%s", White(message)) 67 for _, sub := range subMessages { 68 fmt.Fprintf(ui.Writer, " %s", LightRed(sub)) 69 } 70 fmt.Fprintln(ui.Writer) 71 } 72 73 func (ui *UI) LogLine(message string) { 74 fmt.Fprintf(ui.Writer, "%s\n", DarkGray(message)) 75 } 76 77 func (ui *UI) Debug(message string, subMessages ...string) { 78 if !ui.Verbose { 79 return 80 } 81 fmt.Fprintf(ui.Writer, "%s", DarkGray(message)) 82 for _, sub := range subMessages { 83 fmt.Fprintf(ui.Writer, " %s", LightGray(sub)) 84 } 85 fmt.Fprintln(ui.Writer) 86 } 87 88 func (ui *UI) Print(message string, subMessages ...string) { 89 fmt.Fprintf(ui.Writer, "%s", White(message)) 90 for _, sub := range subMessages { 91 fmt.Fprintf(ui.Writer, " %s", White(sub)) 92 } 93 fmt.Fprintln(ui.Writer) 94 } 95 96 func (ui *UI) Printf(format string, data ...any) { 97 fmt.Fprintf(ui.Writer, format, data...) 98 fmt.Fprintln(ui.Writer) 99 } 100 101 func (ui *UI) PrintDot() { 102 fmt.Fprint(ui.Writer, ".") 103 } 104 105 // PrintEnabled shows enabled in terminal 106 func (ui *UI) PrintEnabled(message string, subMessages ...string) { 107 fmt.Fprintf(ui.Writer, IconMedal+" ") 108 fmt.Fprintf(ui.Writer, "%s", White(message)) 109 for _, sub := range subMessages { 110 fmt.Fprintf(ui.Writer, " %s", Green(sub)) 111 } 112 fmt.Fprintln(ui.Writer) 113 } 114 115 // PrintDisabled shows insuccess in terminal 116 func (ui *UI) PrintDisabled(message string, subMessages ...string) { 117 fmt.Fprintf(ui.Writer, IconCross+" ") 118 fmt.Fprintf(ui.Writer, "%s", White(message)) 119 for _, sub := range subMessages { 120 fmt.Fprintf(ui.Writer, " %s", LightMagenta(sub)) 121 } 122 fmt.Fprintln(ui.Writer) 123 } 124 125 func (ui *UI) Info(message string, subMessages ...string) { 126 fmt.Fprintf(ui.Writer, "%s", DarkGray(message)) 127 for _, sub := range subMessages { 128 fmt.Fprintf(ui.Writer, " %s", LightGray(sub)) 129 } 130 fmt.Fprintln(ui.Writer) 131 } 132 133 func (ui *UI) Err(err error) { 134 fmt.Fprintf(ui.Writer, "%s %s %s\n", LightRed("⨯"), Red(err.Error()), IconError) 135 } 136 137 func (ui *UI) Errf(err string, params ...interface{}) { 138 fmt.Fprintf(ui.Writer, "%s %s\n", LightRed("⨯"), Red(fmt.Sprintf(err, params...))) 139 } 140 141 func (ui *UI) Fail(err error) { 142 ui.Writer = os.Stderr 143 ui.Err(err) 144 fmt.Fprintln(ui.Writer) 145 os.Exit(1) 146 } 147 148 func (ui *UI) Failf(err string, params ...interface{}) { 149 ui.Writer = os.Stderr 150 ui.Errf(err, params...) 151 fmt.Fprintln(ui.Writer) 152 os.Exit(1) 153 } 154 155 func (ui *UI) CommandOutput(output []byte, command string, params ...string) { 156 fullCommand := fmt.Sprintf("%s %s", LightCyan(command), DarkGray(strings.Join(params, " "))) 157 fmt.Fprintf(ui.Writer, "command: %s\noutput:\n%s\n", LightGray(fullCommand), DarkGray(string(output))) 158 } 159 160 func (ui *UI) Medal() { 161 ui.Completed("Congratulations! - Here's your medal: " + IconMedal) 162 } 163 164 func (ui *UI) Completed(main string, sub ...string) { 165 fmt.Fprintln(ui.Writer) 166 if len(sub) == 1 { 167 fmt.Fprintf(ui.Writer, "%s: %s\n", LightGray(main), LightBlue(sub[0])) 168 } else { 169 fmt.Fprintln(ui.Writer, LightGray(main), LightBlue(strings.Join(sub, " "))) 170 } 171 } 172 173 func (ui *UI) GroupCompleted(main string, sub ...string) { 174 fmt.Fprintln(ui.Writer) 175 line := strings.Repeat("=", ui.calculateMessageLength(main, sub...)) 176 fmt.Fprintln(ui.Writer, LightBlue(line)) 177 if len(sub) == 1 { 178 fmt.Fprintf(ui.Writer, "%s: %s", LightGray(main), LightBlue(sub[0])) 179 } else { 180 fmt.Fprintln(ui.Writer, LightGray(main)) 181 } 182 } 183 184 func (ui *UI) InfoGrid(table map[string]string) { 185 for k, v := range table { 186 fmt.Fprintf(ui.Writer, " %s: %s\n", DarkGray(k), LightBlue(v)) 187 } 188 fmt.Fprintln(ui.Writer) 189 } 190 191 func (ui *UI) Properties(table [][]string) { 192 for _, properties := range table { 193 if len(properties) > 1 && properties[0] == Separator { 194 fmt.Fprintln(ui.Writer) 195 continue 196 } 197 198 if len(properties) == 1 { 199 fmt.Fprintf(ui.Writer, " %s\n", Default(properties[0])) 200 fmt.Fprintf(ui.Writer, " %s\n", Default(strings.Repeat("-", len(properties[0])))) 201 } 202 203 if len(properties) == 2 { 204 fmt.Fprintf(ui.Writer, " %s: %s\n", White(properties[0]), LightBlue(properties[1])) 205 } 206 } 207 fmt.Fprintln(ui.Writer) 208 } 209 210 func (ui *UI) Vector(table []string) { 211 for _, v := range table { 212 fmt.Fprintf(ui.Writer, " %s\n", DarkGray(v)) 213 } 214 } 215 216 // Warn shows warning in terminal 217 func (ui *UI) ShellCommand(title string, commands ...string) { 218 fmt.Fprintf(ui.Writer, "%s:\n", White(title)) 219 for _, sub := range commands { 220 fmt.Fprintf(ui.Writer, "$ %s\n", LightGray(sub)) 221 } 222 fmt.Fprintln(ui.Writer) 223 } 224 225 func (ui *UI) calculateMessageLength(message string, subMessages ...string) int { 226 sum := 0 227 for _, sub := range subMessages { 228 sum += len(sub) + 1 // space 229 } 230 231 return sum + len(message) 232 } 233 234 func (ui *UI) Link(message string, subMessages ...string) { 235 fmt.Fprintf(ui.Writer, "%s", LightGray(message)) 236 for _, sub := range subMessages { 237 fmt.Fprintf(ui.Writer, " %s", LightGray(sub)) 238 } 239 fmt.Fprintln(ui.Writer) 240 } 241 242 func (ui *UI) ExecutionLink(message string, subMessages ...string) { 243 fmt.Fprintf(ui.Writer, "%s", LightBlue(message)) 244 for _, sub := range subMessages { 245 fmt.Fprintf(ui.Writer, " %s", LightBlue(sub)) 246 } 247 fmt.Fprintln(ui.Writer) 248 }