package app import ( "sort" abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/config" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) var appListCommand = &cli.Command{ Name: "list", Usage: "List all managed apps", Description: ` This command looks at your local file system listing of apps and servers (e.g. in ~/.abra/) to generate a report of all your apps. By passing the "--status/-S" flag, you can query all your servers for the actual live deployment status. Depending on how many servers you manage, this can take some time. `, Aliases: []string{"ls"}, Flags: []cli.Flag{internal.StatusFlag, internal.ServerFlag, internal.TypeFlag}, Action: func(c *cli.Context) error { appFiles, err := config.LoadAppFiles(internal.Server) if err != nil { logrus.Fatal(err) } apps, err := config.GetApps(appFiles) if err != nil { logrus.Fatal(err) } sort.Sort(config.ByServerAndType(apps)) statuses := map[string]string{} tableCol := []string{"Server", "Type", "Domain"} if internal.Status { tableCol = append(tableCol, "Status") statuses, err = config.GetAppStatuses(appFiles) if err != nil { logrus.Fatal(err) } } table := abraFormatter.CreateTable(tableCol) table.SetAutoMergeCellsByColumnIndex([]int{0}) for _, app := range apps { var tableRow []string if app.Type == internal.Type || internal.Type == "" { // If type flag is set, check for it, if not, Type == "" tableRow = []string{app.File.Server, app.Type, app.Domain} if internal.Status { if status, ok := statuses[app.StackName()]; ok { tableRow = append(tableRow, status) } else { tableRow = append(tableRow, "unknown") } } } table.Append(tableRow) } table.Render() return nil }, }