diff --git a/cli/recipe/upgrade.go b/cli/recipe/upgrade.go index a3b39212..e1c105d0 100644 --- a/cli/recipe/upgrade.go +++ b/cli/recipe/upgrade.go @@ -27,6 +27,13 @@ type imgPin struct { version tagcmp.Tag } +type upgradeList struct { + service string + image string + tag string + upgradeTags []string +} + var recipeUpgradeCommand = cli.Command{ Name: "upgrade", Aliases: []string{"u"}, @@ -75,6 +82,8 @@ You may invoke this command in "wizard" mode and be prompted for input: } } + var upgrades []upgradeList + // check for versions file and load pinned versions versionsPresent := false recipeDir := path.Join(config.RECIPES_DIR, recipe.Name) @@ -240,11 +249,25 @@ You may invoke this command in "wizard" mode and be prompted for input: compatibleStrings = append(compatibleStrings, regVersion) } } - if internal.NoInput { - logrus.Infof("potential upgrades for service: %s, image: %s, tag: %s ::\t", service.Name, image, tag) - for _, upgradableVersion := range compatibleStrings[1:] { - logrus.Infof("\t%s\n", upgradableVersion) + + upgrade := upgradeList{ + service: service.Name, + image: image, + tag: tag.String(), + upgradeTags: make([]string, len(compatibleStrings[1:])), + } + + for n, s := range compatibleStrings[1:] { + var sb strings.Builder + if _, err := sb.WriteString(s); err != nil { } + upgrade.upgradeTags[n] = sb.String() + } + + upgrades = append(upgrades, upgrade) + + if internal.NoInput { + upgradeTag = "skip" } else { prompt := &survey.Select{ Message: msg, @@ -267,10 +290,21 @@ You may invoke this command in "wizard" mode and be prompted for input: logrus.Infof("tag upgraded from %s to %s for %s", tag.String(), upgradeTag, image) } } else { - logrus.Warnf("not upgrading %s, skipping as requested", image) + if !internal.NoInput { + logrus.Warnf("not upgrading %s, skipping as requested", image) + } } } + if internal.NoInput { + // FIXME handle machine-readable here + for _, upgrade := range upgrades { + logrus.Infof("can upgrade service: %s, image: %s, tag: %s ::\n", upgrade.service, upgrade.image, upgrade.tag) + for _, utag := range upgrade.upgradeTags { + logrus.Infof(" %s\n", utag) + } + } + } return nil }, }