diff --git a/cli/cmd/root.go b/cli/cmd/root.go index 70abf7bd5..3a1f4d3e0 100644 --- a/cli/cmd/root.go +++ b/cli/cmd/root.go @@ -7,6 +7,8 @@ import ( "github.com/up9inc/mizu/cli/logger" "github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu/fsUtils" + "github.com/up9inc/mizu/cli/mizu/version" + "github.com/up9inc/mizu/cli/uiUtils" ) var rootCmd = &cobra.Command{ @@ -15,14 +17,9 @@ var rootCmd = &cobra.Command{ Long: `A web traffic viewer for kubernetes Further info is available at https://github.com/up9inc/mizu`, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - if err := fsUtils.EnsureDir(mizu.GetMizuFolderPath()); err != nil { - logger.Log.Errorf("Failed to use mizu folder, %v", err) - } - logger.InitLogger() if err := config.InitConfig(cmd); err != nil { logger.Log.Fatal(err) } - return nil }, } @@ -31,8 +28,24 @@ func init() { rootCmd.PersistentFlags().StringSlice(config.SetCommandName, []string{}, fmt.Sprintf("Override values using --%s", config.SetCommandName)) } +func printNewVersionIfNeeded(versionChan chan string) { + versionMsg := <-versionChan + if versionMsg != "" { + logger.Log.Infof(uiUtils.Yellow, versionMsg) + } +} + // Execute adds all child commands to the root command and sets flags appropriately. // This is called by main.main(). It only needs to happen once to the tapCmd. func Execute() { + if err := fsUtils.EnsureDir(mizu.GetMizuFolderPath()); err != nil { + logger.Log.Errorf("Failed to use mizu folder, %v", err) + } + logger.InitLogger() + + versionChan := make(chan string) + defer printNewVersionIfNeeded(versionChan) + go version.CheckNewerVersion(versionChan) + cobra.CheckErr(rootCmd.Execute()) } diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index 933090ef7..e7341cc28 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -10,7 +10,6 @@ import ( "github.com/up9inc/mizu/cli/logger" "github.com/up9inc/mizu/cli/mizu/fsUtils" "github.com/up9inc/mizu/cli/mizu/goUtils" - "github.com/up9inc/mizu/cli/mizu/version" "github.com/up9inc/mizu/cli/telemetry" "net/http" "net/url" @@ -79,7 +78,7 @@ func RunMizuTap() { } else { namespacesStr = "all namespaces" } - version.CheckNewerVersion() + logger.Log.Infof("Tapping pods in %s", namespacesStr) if err, _ := updateCurrentlyTappedPods(kubernetesProvider, ctx, targetNamespaces); err != nil { diff --git a/cli/mizu/version/versionCheck.go b/cli/mizu/version/versionCheck.go index 85f929d14..eb479dd7a 100644 --- a/cli/mizu/version/versionCheck.go +++ b/cli/mizu/version/versionCheck.go @@ -52,7 +52,7 @@ func CheckVersionCompatibility(port uint16) (bool, error) { return false, nil } -func CheckNewerVersion() { +func CheckNewerVersion(versionChan chan string) { logger.Log.Debugf("Checking for newer version...") start := time.Now() client := github.NewClient(nil) @@ -88,11 +88,13 @@ func CheckNewerVersion() { } gitHubVersion := string(data) gitHubVersion = gitHubVersion[:len(gitHubVersion)-1] - logger.Log.Debugf("Finished version validation, took %v", time.Since(start)) gitHubVersionSemVer := semver.SemVersion(gitHubVersion) currentSemVer := semver.SemVersion(mizu.SemVer) + logger.Log.Debugf("Finished version validation, github version %v, current version %v, took %v", gitHubVersion, currentSemVer, time.Since(start)) + if gitHubVersionSemVer.GreaterThan(currentSemVer) { - logger.Log.Infof(uiUtils.Yellow, fmt.Sprintf("Update available! %v -> %v (%v)", mizu.SemVer, gitHubVersion, *latestRelease.HTMLURL)) + versionChan <- fmt.Sprintf("Update available! %v -> %v (%v)", mizu.SemVer, gitHubVersion, *latestRelease.HTMLURL) } + versionChan <- "" }