diff --git a/cli/app/list.go b/cli/app/list.go index be0753e7..443a5422 100644 --- a/cli/app/list.go +++ b/cli/app/list.go @@ -173,7 +173,7 @@ Use "--status/-S" flag to query all servers for the live deployment status.`, stats.LatestCount++ } } else { - newUpdates = internal.ReverseStringList(newUpdates) + newUpdates = internal.SortVersionsDesc(newUpdates) appStats.Upgrade = strings.Join(newUpdates, "\n") stats.UpgradeCount++ } diff --git a/cli/app/rollback.go b/cli/app/rollback.go index 3535a393..09ca206d 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -167,7 +167,7 @@ beforehand.`, prompt := &survey.Select{ Message: msg, - Options: internal.ReverseStringList(availableDowngrades), + Options: internal.SortVersionsDesc(availableDowngrades), } if err := survey.AskOne(prompt, &chosenDowngrade); err != nil { diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index 7e5624cf..bee884ef 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -159,7 +159,7 @@ beforehand.`, prompt := &survey.Select{ Message: msg, - Options: internal.ReverseStringList(availableUpgrades), + Options: internal.SortVersionsDesc(availableUpgrades), } if err := survey.AskOne(prompt, &chosenUpgrade); err != nil { diff --git a/cli/internal/deploy.go b/cli/internal/deploy.go index 5485b91f..79a7fac9 100644 --- a/cli/internal/deploy.go +++ b/cli/internal/deploy.go @@ -3,12 +3,14 @@ package internal import ( "fmt" "os" + "sort" "strings" appPkg "coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/log" + "coopcloud.tech/tagcmp" "github.com/AlecAivazis/survey/v2" "github.com/charmbracelet/lipgloss" dockerClient "github.com/docker/docker/client" @@ -274,3 +276,22 @@ func PostCmds(cl *dockerClient.Client, app appPkg.App, commands string) error { } return nil } + +// SortVersionsDesc sorts versions in descending order. +func SortVersionsDesc(versions []string) []string { + var tags []tagcmp.Tag + + for _, v := range versions { + parsed, _ := tagcmp.Parse(v) // skips unsupported tags + tags = append(tags, parsed) + } + + sort.Sort(tagcmp.ByTagDesc(tags)) + + var desc []string + for _, t := range tags { + desc = append(desc, t.String()) + } + + return desc +} diff --git a/cli/internal/list.go b/cli/internal/list.go deleted file mode 100644 index d2a89527..00000000 --- a/cli/internal/list.go +++ /dev/null @@ -1,10 +0,0 @@ -package internal - -// ReverseStringList reverses a list of a strings. Roll on Go generics. -func ReverseStringList(strings []string) []string { - for i, j := 0, len(strings)-1; i < j; i, j = i+1, j-1 { - strings[i], strings[j] = strings[j], strings[i] - } - - return strings -}