diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-11-24 09:47:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-24 09:47:26 +0100 |
commit | b1b18d820958e354a2a2869a55e3780b95f43422 (patch) | |
tree | 8cfc221ea1e060055983b0b2b0c08a52325ea55b /client | |
parent | 8e84a1b58a1da75c33f740ea7601518a64f367e8 (diff) | |
parent | 05e063f35e07a46b1e118fa13c2610a484cc17d3 (diff) |
Merge pull request #20159 from vespa-engine/ldalves/vespa-cli-spinner
Add basic spinner to vespa-cli
Diffstat (limited to 'client')
-rw-r--r-- | client/go/auth0/auth0.go | 4 | ||||
-rw-r--r-- | client/go/cmd/clone.go | 40 | ||||
-rw-r--r-- | client/go/cmd/deploy.go | 15 | ||||
-rw-r--r-- | client/go/util/spinner.go | 28 |
4 files changed, 52 insertions, 35 deletions
diff --git a/client/go/auth0/auth0.go b/client/go/auth0/auth0.go index 377d56a1637..43b42cb8960 100644 --- a/client/go/auth0/auth0.go +++ b/client/go/auth0/auth0.go @@ -334,9 +334,9 @@ func RunLogin(ctx context.Context, a *Auth0, expired bool) (System, error) { } var res auth.Result - err = util.Spinner("Waiting for login to complete in browser", func() error { + util.Spinner("Waiting for login to complete in browser ...", func() error { res, err = a.Authenticator.Wait(ctx, state) - return err + return nil }) if err != nil { diff --git a/client/go/cmd/clone.go b/client/go/cmd/clone.go index 6550e24e094..e4bbd751f8a 100644 --- a/client/go/cmd/clone.go +++ b/client/go/cmd/clone.go @@ -142,27 +142,29 @@ func getSampleAppsZip() *os.File { return f } - log.Print(color.Yellow("Downloading sample apps ...")) // TODO: Spawn thread to indicate progress - request, err := http.NewRequest("GET", "https://github.com/vespa-engine/sample-apps/archive/refs/heads/master.zip", nil) - if err != nil { - fatalErr(err, "Invalid URL") - return nil - } - response, err := util.HttpDo(request, time.Minute*60, "GitHub") - if err != nil { - fatalErr(err, "Could not download sample apps from GitHub") - return nil - } - defer response.Body.Close() - if response.StatusCode != 200 { - fatalErr(nil, "Could not download sample apps from GitHub: ", response.StatusCode) + util.Spinner(color.Yellow("Downloading sample apps ...").String(), func() error { + request, err := http.NewRequest("GET", "https://github.com/vespa-engine/sample-apps/archive/refs/heads/master.zip", nil) + if err != nil { + fatalErr(err, "Invalid URL") + return nil + } + response, err := util.HttpDo(request, time.Minute*60, "GitHub") + if err != nil { + fatalErr(err, "Could not download sample apps from GitHub") + return nil + } + defer response.Body.Close() + if response.StatusCode != 200 { + fatalErr(nil, "Could not download sample apps from GitHub: ", response.StatusCode) + return nil + } + if _, err := io.Copy(f, response.Body); err != nil { + fatalErr(err, "Could not write sample apps to file: ", f.Name()) + return nil + } return nil - } + }) - if _, err := io.Copy(f, response.Body); err != nil { - fatalErr(err, "Could not write sample apps to file: ", f.Name()) - return nil - } return f } diff --git a/client/go/cmd/deploy.go b/client/go/cmd/deploy.go index 034dac2e67b..e866fa20d08 100644 --- a/client/go/cmd/deploy.go +++ b/client/go/cmd/deploy.go @@ -9,6 +9,7 @@ import ( "log" "github.com/spf13/cobra" + "github.com/vespa-engine/vespa/client/go/util" "github.com/vespa-engine/vespa/client/go/vespa" ) @@ -18,8 +19,9 @@ const ( ) var ( - zoneArg string - logLevelArg string + zoneArg string + logLevelArg string + sessionOrRunID int64 ) func init() { @@ -63,7 +65,14 @@ $ vespa deploy -t cloud -z perf.aws-us-east-1c`, } target := getTarget() opts := getDeploymentOpts(cfg, pkg, target) - if sessionOrRunID, err := vespa.Deploy(opts); err == nil { + + util.Spinner(color.Yellow("Uploading application package ...").String(), func() error { + sessionOrRunID, err = vespa.Deploy(opts) + return err + }) + + if err == nil { + fmt.Print("\n") if opts.IsCloud() { printSuccess("Triggered deployment of ", color.Cyan(pkg.Path), " with run ID ", color.Cyan(sessionOrRunID)) } else { diff --git a/client/go/util/spinner.go b/client/go/util/spinner.go index 1deb4296d28..d65595dd612 100644 --- a/client/go/util/spinner.go +++ b/client/go/util/spinner.go @@ -3,6 +3,7 @@ package util import ( + "fmt" "os" "time" @@ -11,23 +12,25 @@ import ( ) const ( - spinnerTextEllipsis = "..." - spinnerTextDone = "done" - spinnerTextFailed = "failed" - spinnerColor = "blue" + spinnerTextDone = "done" + spinnerTextFailed = "failed" + spinnerColor = "blue" ) var messages = os.Stderr -func Spinner(text string, fn func() error) error { - initialMsg := text + spinnerTextEllipsis + " " - doneMsg := initialMsg + spinnerTextDone + "\n" +func Spinner(text string, fn func() error) { + initialMsg := text + " " + doneMsg := "\n" + initialMsg + spinnerTextDone + "\n" failMsg := initialMsg + spinnerTextFailed + "\n" + loading(initialMsg, doneMsg, failMsg, fn) +} - return loading(initialMsg, doneMsg, failMsg, fn) +func Waiting(fn func() error) { + loading("", "", "", fn) } -func loading(initialMsg, doneMsg, failMsg string, fn func() error) error { +func loading(initialMsg, doneMsg, failMsg string, fn func() error) { done := make(chan struct{}) errc := make(chan error) go func() { @@ -39,7 +42,7 @@ func loading(initialMsg, doneMsg, failMsg string, fn func() error) error { s.HideCursor = true s.Writer = messages - if err := s.Color(spinnerColor); err != nil { + if err := s.Color(spinnerColor, "bold"); err != nil { panic(Error(err, "failed setting spinner color")) } @@ -55,7 +58,10 @@ func loading(initialMsg, doneMsg, failMsg string, fn func() error) error { err := fn() errc <- err <-done - return err + + if err != nil { + fmt.Println(fmt.Errorf("an unexpected error occurred: %w", err)) + } } func Error(e error, message string) error { |