diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 1c8982e3..02ee719c 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -180,9 +180,10 @@ checkout as-is. Recipe commit hashes are also supported as values for if err := internal.DeployOverview( app, - deployWarnMessages, deployedVersion, toDeployVersion, + "", + deployWarnMessages, ); err != nil { log.Fatal(err) } diff --git a/cli/app/undeploy.go b/cli/app/undeploy.go index 4fa1f499..fd7b1688 100644 --- a/cli/app/undeploy.go +++ b/cli/app/undeploy.go @@ -64,11 +64,12 @@ Passing "--prune/-p" does not remove those volumes.`, toWriteVersion = chaosVersion } - if err := internal.UndeployOverview( + if err := internal.DeployOverview( app, deployMeta.Version, - chaosVersion, - toWriteVersion, + config.NO_DOMAIN_DEFAULT, + "", + nil, ); err != nil { log.Fatal(err) } diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index ce116c04..259e2f40 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -43,7 +43,8 @@ beforehand. See "abra app backup" for more.`, ValidArgsFunction: func( cmd *cobra.Command, args []string, - toComplete string) ([]string, cobra.ShellCompDirective) { + toComplete string, + ) ([]string, cobra.ShellCompDirective) { switch l := len(args); l { case 0: return autocomplete.AppNameComplete() @@ -206,23 +207,21 @@ beforehand. See "abra app backup" for more.`, return } - chaosVersion := config.CHAOS_DEFAULT - if deployMeta.IsChaos { - chaosVersion = deployMeta.ChaosVersion - - if deployMeta.ChaosVersion == "" { - chaosVersion = config.UNKNOWN_DEFAULT - } + if upgradeReleaseNotes != "" && chosenUpgrade != "" { + fmt.Print(upgradeReleaseNotes) + } else { + upgradeWarnMessages = append( + upgradeWarnMessages, + fmt.Sprintf("no release notes available for %s", chosenUpgrade), + ) } - if err := internal.NewVersionOverview( + if err := internal.DeployOverview( app, - upgradeWarnMessages, - "upgrade", deployMeta.Version, - chaosVersion, chosenUpgrade, upgradeReleaseNotes, + upgradeWarnMessages, ); err != nil { log.Fatal(err) } @@ -397,9 +396,7 @@ func ensureDeployed(cl *dockerClient.Client, app app.App) (stack.DeployMeta, err return deployMeta, nil } -var ( - showReleaseNotes bool -) +var showReleaseNotes bool func init() { AppUpgradeCommand.Flags().BoolVarP( diff --git a/cli/internal/deploy.go b/cli/internal/deploy.go index bdb59406..22af5ec3 100644 --- a/cli/internal/deploy.go +++ b/cli/internal/deploy.go @@ -45,7 +45,8 @@ func NewVersionOverview( deployedVersion, deployedChaosVersion, toDeployVersion, - releaseNotes string) error { + releaseNotes string, +) error { deployConfig := "compose.yml" if composeFiles, ok := app.Env["COMPOSE_FILE"]; ok { deployConfig = formatComposeFiles(composeFiles) @@ -76,7 +77,6 @@ func NewVersionOverview( {"CURRENT DEPLOYMENT", "---"}, {"VERSION", formatter.BoldDirtyDefault(deployedVersion)}, - {"CHAOS ", formatter.BoldDirtyDefault(deployedChaosVersion)}, {upperKind, "---"}, {"VERSION", formatter.BoldDirtyDefault(toDeployVersion)}, @@ -130,9 +130,10 @@ func formatComposeFiles(composeFiles string) string { // DeployOverview shows a deployment overview func DeployOverview( app appPkg.App, - warnMessages []string, deployedVersion string, toDeployVersion string, + info string, + warnMessages []string, ) error { deployConfig := "compose.yml" if composeFiles, ok := app.Env["COMPOSE_FILE"]; ok { @@ -163,17 +164,22 @@ func DeployOverview( {"CURRENT DEPLOYMENT", "---"}, {"VERSION", formatter.BoldDirtyDefault(deployedVersion)}, - {"CURRENT ENV VERSION", "---"}, + {"ENV VERSION", "---"}, {"ENV VERSION", formatter.BoldDirtyDefault(envVersion)}, {"NEW DEPLOYMENT", "---"}, {"VERSION", formatter.BoldDirtyDefault(toDeployVersion)}, } - overview := formatter.CreateOverview("DEPLOY OVERVIEW", rows) + deployType := getDeployType(deployedVersion, toDeployVersion) + overview := formatter.CreateOverview(fmt.Sprintf("%s OVERVIEW", deployType), rows) fmt.Println(overview) + if info != "" { + fmt.Println(info) + } + for _, msg := range warnMessages { log.Warn(msg) } @@ -195,67 +201,31 @@ func DeployOverview( return nil } -// UndeployOverview shows an undeployment overview -func UndeployOverview( - app appPkg.App, - deployedVersion, - deployedChaosVersion, - toWriteVersion string, -) error { - deployConfig := "compose.yml" - if composeFiles, ok := app.Env["COMPOSE_FILE"]; ok { - deployConfig = formatComposeFiles(composeFiles) +func getDeployType(currentVersion, newVersion string) string { + if currentVersion == newVersion { + return "RE-DEPLOY" } - - server := app.Server - if app.Server == "default" { - server = "local" + if currentVersion == config.NO_VERSION_DEFAULT { + return "NEW DEPLOY" } - - domain := app.Domain - if domain == "" { - domain = config.NO_DOMAIN_DEFAULT + if strings.Contains(newVersion, "+U") { + return "CHAOS DEPLOY" } - - envVersion := app.Recipe.EnvVersionRaw - if envVersion == "" { - envVersion = config.NO_VERSION_DEFAULT + if strings.Contains(currentVersion, "+U") { + return "UNCHAOS DEPLOY" } - - rows := [][]string{ - {"DOMAIN", domain}, - {"RECIPE", app.Recipe.Name}, - {"SERVER", server}, - {"CONFIG", deployConfig}, - - {"CURRENT DEPLOYMENT", "---"}, - {"VERSION", formatter.BoldDirtyDefault(deployedVersion)}, - {"CHAOS", formatter.BoldDirtyDefault(deployedChaosVersion)}, - - {fmt.Sprintf("%s.ENV", strings.ToUpper(app.Name)), "---"}, - {"CURRENT VERSION", formatter.BoldDirtyDefault(envVersion)}, - {"NEW VERSION", formatter.BoldDirtyDefault(toWriteVersion)}, + currentParsed, err := tagcmp.Parse(currentVersion) + if err != nil { + return "DEPLOY" } - - overview := formatter.CreateOverview("UNDEPLOY OVERVIEW", rows) - - fmt.Println(overview) - - if NoInput { - return nil + newParsed, err := tagcmp.Parse(newVersion) + if err != nil { + return "DEPLOY" } - - response := false - prompt := &survey.Confirm{Message: "proceed?"} - if err := survey.AskOne(prompt, &response); err != nil { - return err + if currentParsed.IsLessThan(newParsed) { + return "UPGRADE" } - - if !response { - log.Fatal("undeploy cancelled") - } - - return nil + return "DOWNGRADE" } // PostCmds parses a string of commands and executes them inside of the respective services