Merge pull request #94 from foomo/fix/spinner-play

fix: add spinner play
This commit is contained in:
Kevin Franklin Kim 2025-04-09 22:42:24 +02:00 committed by GitHub
commit 5866731e84
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 11 deletions

View File

@ -22,6 +22,9 @@ func NewNoopSpinner(prefix string) *NoopSpinner {
func (s *NoopSpinner) Start(message ...string) {
pterm.Info.Println(s.message(message...))
}
func (s *NoopSpinner) Play() {
s.start = time.Now()
}
@ -60,7 +63,7 @@ func (s *NoopSpinner) Write(p []byte) (int, error) {
func (s *NoopSpinner) message(message ...string) string {
msg := []string{s.prefix}
if !s.start.IsZero() && s.stopped {
msg[0] += " ⏱ " + time.Since(s.start).Round(0).String()
msg[0] += " ⏱ " + time.Since(s.start).Round(2).String()
}
if value := strings.Join(message, " "); len(value) > 0 {
msg = append(msg, value)

View File

@ -6,6 +6,7 @@ import (
type Spinner interface {
Start(message ...string)
Play()
Info(message ...string)
Warning(message ...string)
Fail(message ...string)

View File

@ -19,8 +19,8 @@ type StandardSpinner struct {
func NewStandardSpinner(writer io.Writer, prefix string) *StandardSpinner {
return &StandardSpinner{
printer: pterm.DefaultSpinner.WithWriter(writer).
WithSequence(" ⠋ ", " ⠙ ", " ⠹ ", " ⠸ ", " ⠼ ", " ⠴ ", " ⠦ ", " ⠧ ", " ⠇ ", " ⠏ ").
WithDelay(500 * time.Millisecond).
WithSequence(" ⏸︎ ").
WithDelay(300 * time.Millisecond).
WithShowTimer(false),
prefix: prefix,
}
@ -34,6 +34,10 @@ func (s *StandardSpinner) Start(message ...string) {
s.start = time.Now()
}
func (s *StandardSpinner) Play() {
s.printer.Sequence = []string{" ⠋ ", " ⠙ ", " ⠹ ", " ⠸ ", " ⠼ ", " ⠴ ", " ⠦ ", " ⠧ ", " ⠇ ", " ⠏ "}
}
func (s *StandardSpinner) Info(message ...string) {
s.stopped = true
s.printer.Info(s.message(message...))
@ -62,14 +66,19 @@ func (s *StandardSpinner) Write(p []byte) (int, error) {
}
}
s.log = append(s.log, lines...)
// s.printer.UpdateText(s.message())
return len(p), nil
}
func (s *StandardSpinner) message(message ...string) string {
msg := []string{s.prefix}
if !s.start.IsZero() && s.stopped {
msg[0] += " ⏱ " + time.Since(s.start).Round(0).String()
msg[0] += " ⏱ " + time.Since(s.start).Round(time.Second).String()
}
width := pterm.GetTerminalWidth() - 10
for i, line := range msg {
if len(line) > width {
msg[i] = line[:width] + "…"
}
}
if value := strings.Join(message, " "); len(value) > 0 {
msg = append(msg, value)
@ -77,11 +86,5 @@ func (s *StandardSpinner) message(message ...string) string {
if pterm.PrintDebugMessages {
msg = append(msg, s.log...)
}
m := pterm.GetTerminalWidth() - 10
for i, line := range msg {
if len(line) > m {
msg[i] = line[:m] + "…"
}
}
return strings.Join(msg, "\n ")
}

View File

@ -256,6 +256,8 @@ func (sq *Squadron) Push(ctx context.Context, pushArgs []string, parallel int) e
for _, a := range all {
wg.Go(func() error {
a.spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, a.spinner)
if err := ctx.Err(); err != nil {
a.spinner.Warning(err.Error())
@ -287,6 +289,7 @@ func (sq *Squadron) BuildDependencies(ctx context.Context, buildArgs []string, p
wg.Go(func() error {
spinner := printer.NewSpinner(fmt.Sprintf("📦 | %s (%s:%s)", name, build.Image, build.Tag))
spinner.Start()
spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, spinner)
if err := ctx.Err(); err != nil {
@ -345,6 +348,8 @@ func (sq *Squadron) Build(ctx context.Context, buildArgs []string, parallel int)
for _, a := range all {
wg.Go(func() error {
a.spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, a.spinner)
if err := ctx.Err(); err != nil {
a.spinner.Warning(err.Error())
@ -376,6 +381,7 @@ func (sq *Squadron) Down(ctx context.Context, helmArgs []string, parallel int) e
wg.Go(func() error {
spinner := printer.NewSpinner(fmt.Sprintf("🗑️ | %s/%s", key, k))
spinner.Start()
spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, spinner)
if err := ctx.Err(); err != nil {
@ -457,6 +463,7 @@ func (sq *Squadron) Diff(ctx context.Context, helmArgs []string, parallel int) (
wg.Go(func() error {
spinner := printer.NewSpinner(fmt.Sprintf("🔍 | %s/%s", key, k))
spinner.Start()
spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, spinner)
if err := ctx.Err(); err != nil {
@ -592,6 +599,7 @@ func (sq *Squadron) Status(ctx context.Context, helmArgs []string, parallel int)
wg.Go(func() error {
spinner := printer.NewSpinner(fmt.Sprintf("📄 | %s/%s", key, k))
spinner.Start()
spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, spinner)
if err := ctx.Err(); err != nil {
@ -702,6 +710,7 @@ func (sq *Squadron) Rollback(ctx context.Context, revision string, helmArgs []st
wg.Go(func() error {
spinner := printer.NewSpinner(fmt.Sprintf("♻️ | %s/%s", key, k))
spinner.Start()
spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, spinner)
if err := ctx.Err(); err != nil {
@ -822,6 +831,8 @@ func (sq *Squadron) Up(ctx context.Context, helmArgs []string, username, version
for _, a := range all {
wg.Go(func() error {
a.spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, a.spinner)
if err := ctx.Err(); err != nil {
a.spinner.Warning(err.Error())
@ -905,6 +916,7 @@ func (sq *Squadron) Template(ctx context.Context, helmArgs []string, parallel in
wg.Go(func() error {
spinner := printer.NewSpinner(fmt.Sprintf("🧾 | %s/%s", key, k))
spinner.Start()
spinner.Play()
ctx := ptermx.ContextWithSpinner(ctx, spinner)
if err := ctx.Err(); err != nil {