aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-11-24 09:47:26 +0100
committerGitHub <noreply@github.com>2021-11-24 09:47:26 +0100
commitb1b18d820958e354a2a2869a55e3780b95f43422 (patch)
tree8cfc221ea1e060055983b0b2b0c08a52325ea55b /client
parent8e84a1b58a1da75c33f740ea7601518a64f367e8 (diff)
parent05e063f35e07a46b1e118fa13c2610a484cc17d3 (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.go4
-rw-r--r--client/go/cmd/clone.go40
-rw-r--r--client/go/cmd/deploy.go15
-rw-r--r--client/go/util/spinner.go28
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 {