abra/cli/recipe/version.go

86 lines
2.1 KiB
Go
Raw Normal View History

2021-09-05 20:33:07 +00:00
package recipe
import (
"fmt"
"sort"
2021-09-05 20:33:07 +00:00
"coopcloud.tech/abra/cli/internal"
2021-12-25 16:12:22 +00:00
"coopcloud.tech/abra/pkg/autocomplete"
2021-12-28 00:24:23 +00:00
"coopcloud.tech/abra/pkg/formatter"
recipePkg "coopcloud.tech/abra/pkg/recipe"
"github.com/olekukonko/tablewriter"
2021-09-05 20:33:07 +00:00
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
2021-09-05 20:33:07 +00:00
)
func sortServiceByName(versions [][]string) func(i, j int) bool {
return func(i, j int) bool {
// NOTE(d1): corresponds to the `tableCol` definition below
if versions[i][1] == "app" {
return true
}
return versions[i][1] < versions[j][1]
}
}
var recipeVersionCommand = cli.Command{
Name: "versions",
Aliases: []string{"v"},
Usage: "List recipe versions",
ArgsUsage: "<recipe>",
Description: "Versions are read from the recipe catalogue.",
Flags: []cli.Flag{
internal.DebugFlag,
internal.OfflineFlag,
2023-09-07 16:50:25 +00:00
internal.NoInputFlag,
internal.MachineReadableFlag,
},
Before: internal.SubCommandBefore,
2021-12-25 16:12:22 +00:00
BashComplete: autocomplete.RecipeNameComplete,
2021-09-05 20:33:07 +00:00
Action: func(c *cli.Context) error {
2023-09-07 16:50:25 +00:00
recipe := internal.ValidateRecipe(c)
2023-09-07 16:50:25 +00:00
catl, err := recipePkg.ReadRecipeCatalogue(internal.Offline)
2021-09-05 20:33:07 +00:00
if err != nil {
logrus.Fatal(err)
}
2023-09-07 16:50:25 +00:00
recipeMeta, ok := catl[recipe.Name]
if !ok {
logrus.Fatalf("%s is not published on the catalogue?", recipe.Name)
}
if len(recipeMeta.Versions) == 0 {
logrus.Fatalf("%s has no catalogue published versions?", recipe.Name)
}
2021-12-25 16:12:34 +00:00
for i := len(recipeMeta.Versions) - 1; i >= 0; i-- {
tableCols := []string{"version", "service", "image", "tag"}
table := formatter.CreateTable(tableCols)
for version, meta := range recipeMeta.Versions[i] {
var versions [][]string
for service, serviceMeta := range meta {
versions = append(versions, []string{version, service, serviceMeta.Image, serviceMeta.Tag})
}
2021-09-05 20:33:07 +00:00
sort.Slice(versions, sortServiceByName(versions))
for _, version := range versions {
table.Append(version)
}
2021-12-25 16:12:41 +00:00
if internal.MachineReadable {
table.JSONRender()
} else {
table.SetAutoMergeCellsByColumnIndex([]int{0})
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.Render()
fmt.Println()
}
}
2021-12-25 16:12:41 +00:00
}
2021-09-05 20:33:07 +00:00
return nil
},
}