github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/cmd/update.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 6 "github.com/criteo/command-launcher/internal/config" 7 "github.com/criteo/command-launcher/internal/console" 8 "github.com/criteo/command-launcher/internal/context" 9 "github.com/criteo/command-launcher/internal/repository" 10 "github.com/criteo/command-launcher/internal/updater" 11 "github.com/criteo/command-launcher/internal/user" 12 log "github.com/sirupsen/logrus" 13 "github.com/spf13/cobra" 14 "github.com/spf13/viper" 15 ) 16 17 type UpdateFlags struct { 18 Package bool 19 Self bool 20 } 21 22 var ( 23 updateFlags = UpdateFlags{} 24 ) 25 26 func AddUpdateCmd(rootCmd *cobra.Command, appCtx context.LauncherContext, localRepo repository.PackageRepository) { 27 appName := appCtx.AppName() 28 updateCmd := &cobra.Command{ 29 Use: "update", 30 Short: fmt.Sprintf("Update %s, or its commands", appName), 31 Long: fmt.Sprintf(` 32 Check the update of %s and its commands. 33 `, appName), 34 Example: fmt.Sprintf(` 35 %s update --package 36 %s update --self 37 `, appName, appName), 38 RunE: func(cmd *cobra.Command, args []string) error { 39 u, err := user.GetUser() 40 if err != nil { 41 log.Errorln(err) 42 } 43 44 if updateFlags.Self { 45 console.Highlight("checking available %s version ...", appCtx.AppName()) 46 selfUpdater := updater.SelfUpdater{ 47 BinaryName: appCtx.AppName(), 48 LatestVersionUrl: viper.GetString(config.SELF_UPDATE_LATEST_VERSION_URL_KEY), 49 SelfUpdateRootUrl: viper.GetString(config.SELF_UPDATE_BASE_URL_KEY), 50 User: u, 51 CurrentVersion: appCtx.AppVersion(), 52 Timeout: viper.GetDuration(config.SELF_UPDATE_TIMEOUT_KEY), 53 } 54 selfUpdater.CheckUpdateAsync() 55 err := selfUpdater.Update() 56 if err != nil { 57 console.Error(err.Error()) 58 } else { 59 console.Success("%s is up-to-date", appCtx.AppName()) 60 } 61 } 62 63 if updateFlags.Package { 64 console.Highlight("checking available package updates ...") 65 enableCI := viper.GetBool(config.CI_ENABLED_KEY) 66 packageLockFile := viper.GetString(config.PACKAGE_LOCK_FILE_KEY) 67 if enableCI { 68 fmt.Printf("CI mode enabled, load package lock file: %s\n", packageLockFile) 69 } 70 cmdUpdater := updater.CmdUpdater{ 71 LocalRepo: localRepo, 72 CmdRepositoryBaseUrl: viper.GetString(config.COMMAND_REPOSITORY_BASE_URL_KEY), 73 User: u, 74 Timeout: viper.GetDuration(config.SELF_UPDATE_TIMEOUT_KEY), 75 EnableCI: enableCI, 76 PackageLockFile: packageLockFile, 77 } 78 cmdUpdater.CheckUpdateAsync() 79 err := cmdUpdater.Update() 80 if err != nil { 81 console.Error(err.Error()) 82 } else { 83 console.Success("packages are up-to-date") 84 } 85 } 86 87 if !updateFlags.Package && !updateFlags.Self { 88 cmd.Help() 89 } 90 91 return nil 92 }, 93 } 94 95 updateCmd.Flags().BoolVarP(&updateFlags.Package, "package", "p", false, "Update packages and commands") 96 updateCmd.Flags().BoolVarP(&updateFlags.Self, "self", "s", false, "Self update") 97 98 rootCmd.AddCommand(updateCmd) 99 }