gouick/cmd/upgrade.go

136 lines
3.9 KiB
Go

/*
Copyright © 2022 Matthieu Derasse <git@derasse.fr>
*/
package cmd
import (
"github.com/spf13/cobra"
"git.home.m-and-m.ovh/mderasse/boot/helpers"
log "github.com/sirupsen/logrus"
)
// upgradeCmd represents the upgrade command
var upgradeCmd = &cobra.Command{
Use: "upgrade",
Short: "Upgrade all development dependencies",
Long: `Upgrade the following dependencies:
- Golang
- Go Swagger
- ...
`,
Run: runUpgradeAction,
}
func init() {
rootCmd.AddCommand(upgradeCmd)
}
func runUpgradeAction(cmd *cobra.Command, args []string) {
log.Debug("Starting Upgrade command")
for _, dependency := range dependencyList {
log.Debugf("Checking if dependency %s is supported", dependency.GetName())
isSupported, err := dependency.IsVersionSupported()
if err != nil {
log.Errorf("Fail to check %s version. The following error happen: %s", dependency.GetName(), err.Error())
return
}
if isSupported {
log.Infof("%s version is supported, continue", dependency.GetName())
continue
}
log.Infof("Your %s is not supported.", dependency.GetName())
if !dependency.CanBeInstalled() {
log.Warnf("%s cannot be installed by Goguik. Please install it by yourself !", dependency.GetName())
continue
}
if !acceptAll {
log.Infof("Do you want to install the following version: %s", dependency.GetMinimumVersion())
answer := helpers.YesOrNoInput()
if !answer {
log.Warnf("Skipping installation of %s. Some part of the application might not be able to work correctly!", dependency.GetName())
continue
}
}
log.Debug("Trying to find the best installation directory")
installDirectory, err := dependency.GetInstallDirectory()
if err != nil {
log.Errorf("Fail to compute the %s install directory. The following error happen: %s", dependency.GetName(), err.Error())
return
}
// ask user if the path is correct, else ask new path and check validity
if !acceptAll {
log.Infof("Do you want to install %s in the directory %s ?", dependency.GetName(), installDirectory)
answer := helpers.YesOrNoInput()
if !answer {
log.Infof("Where do you want to install %s ?", dependency.GetName())
installDirectory = helpers.IsValidPathInput()
}
} else {
log.Infof("Installing %s in the following directory: %s", dependency.GetName(), installDirectory)
}
log.Debug("Checking directory and creating it if needed")
// check if the path is ok, else ask user for new path if we are in a interactive mode, else stop
err = helpers.CheckAndCreateDir(installDirectory)
if err != nil {
log.Errorf("Impossible to create the instalation directory for %s", dependency.GetName())
if acceptAll {
return
}
log.Infof("Where do you want to install %s ?", dependency.GetName())
installDirectory = helpers.IsValidPathInput()
}
log.Infof("%s", dependency.DescribeInstall(installDirectory))
log.Info("Do you want to continue ?")
answer := helpers.YesOrNoInput()
if !answer {
log.Warnf("Skipping installation of %s. Some part of the application might not be able to work correctly!", dependency.GetName())
continue
}
log.Debug("Starting the installation")
err = dependency.Install(installDirectory)
if err != nil {
log.Errorf("Fail to install %s version. The following error happen: %s", dependency.GetName(), err.Error())
return
}
log.Infof("%s", dependency.DescribePostInstall(installDirectory))
log.Info("Do you want to continue ?")
answer = helpers.YesOrNoInput()
if !answer {
log.Warnf("Skipping post installation of %s. Some part of the application might not be able to work correctly!", dependency.GetName())
continue
}
log.Debug("Launching post install")
err = dependency.PostInstall(installDirectory)
if err != nil {
log.Errorf("Fail to execute post install of %s. The following error happen: %s", dependency.GetName(), err.Error())
return
}
log.Infof("%s successfully installed", dependency.GetName())
}
}