diff --git a/cmd/list.go b/cmd/list.go index efbcbbad..f4fcdddf 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "os" + "strconv" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -436,11 +437,66 @@ var listNotificationCmd = &cobra.Command{ }, } +var listProjectGroupsCmd = &cobra.Command{ + Use: "project-groups", + Aliases: []string{"pg"}, + Short: "List groups in a project (alias: pg)", + PreRunE: func(_ *cobra.Command, _ []string) error { + return validateTokenE(lagoonCLIConfig.Current) + }, + RunE: func(cmd *cobra.Command, args []string) error { + debug, err := cmd.Flags().GetBool("debug") + if err != nil { + return err + } + if cmdProjectName == "" { + fmt.Println("Missing arguments: Project is not defined") + cmd.Help() + os.Exit(1) + } + + current := lagoonCLIConfig.Current + token := lagoonCLIConfig.Lagoons[current].Token + lc := lclient.New( + lagoonCLIConfig.Lagoons[current].GraphQL, + lagoonCLIVersion, + &token, + debug) + projectGroups, err := l.GetProjectGroups(context.TODO(), cmdProjectName, lc) + handleError(err) + + if len(projectGroups.Groups) == 0 { + output.RenderInfo(fmt.Sprintf("There are no projects in group '%s'", groupName), outputOptions) + os.Exit(0) + } + + data := []output.Data{} + for _, group := range projectGroups.Groups { + var organization = "null" + if group.Organization != 0 { + organization = strconv.Itoa(group.Organization) + } + data = append(data, []string{ + returnNonEmptyString(fmt.Sprintf("%v", group.ID)), + returnNonEmptyString(fmt.Sprintf("%v", group.Name)), + returnNonEmptyString(fmt.Sprintf("%v", organization)), + }) + } + dataMain := output.Table{ + Header: []string{"Group ID", "Group Name", "Organization"}, + Data: data, + } + output.RenderOutput(dataMain, outputOptions) + return nil + }, +} + func init() { listCmd.AddCommand(listDeployTargetsCmd) listCmd.AddCommand(listDeploymentsCmd) listCmd.AddCommand(listGroupsCmd) listCmd.AddCommand(listGroupProjectsCmd) + listCmd.AddCommand(listProjectGroupsCmd) listCmd.AddCommand(listEnvironmentsCmd) listCmd.AddCommand(listProjectsCmd) listCmd.AddCommand(listNotificationCmd) diff --git a/go.mod b/go.mod index 07b84f04..7b53381d 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/guregu/null v4.0.0+incompatible // workaround for https://github.com/manifoldco/promptui/issues/98 github.com/nicksnyder/go-i18n v1.10.1 // indirect - github.com/uselagoon/machinery v0.0.10 + github.com/uselagoon/machinery v0.0.12-0.20230828053336-cb8156419c94 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 // indirect golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20191105091915-95d230a53780 // indirect diff --git a/go.sum b/go.sum index 448aa306..0770abdb 100644 --- a/go.sum +++ b/go.sum @@ -111,6 +111,10 @@ github.com/uselagoon/machinery v0.0.9-0.20230710124508-ef420b365811 h1:OUujMdzHe github.com/uselagoon/machinery v0.0.9-0.20230710124508-ef420b365811/go.mod h1:IXLxlkahEAEgpCmu9Xa/Wmjo6ja4Aoq7tf8G7VrileE= github.com/uselagoon/machinery v0.0.10 h1:pR+2iwXod0XnnyeZsJMlmkSU5BV8cYI65JNoaLwUVbQ= github.com/uselagoon/machinery v0.0.10/go.mod h1:IXLxlkahEAEgpCmu9Xa/Wmjo6ja4Aoq7tf8G7VrileE= +github.com/uselagoon/machinery v0.0.12-0.20230825064934-e3ebd4b50b51 h1:xGymM19kpjhDapCxl8+gJ2dwiH3PcsjbgmqhxAclIEo= +github.com/uselagoon/machinery v0.0.12-0.20230825064934-e3ebd4b50b51/go.mod h1:IXLxlkahEAEgpCmu9Xa/Wmjo6ja4Aoq7tf8G7VrileE= +github.com/uselagoon/machinery v0.0.12-0.20230828053336-cb8156419c94 h1:GZQox2sqLVBPyCQqG7A163oFCMJ/+Egkoa1u/RXxHdU= +github.com/uselagoon/machinery v0.0.12-0.20230828053336-cb8156419c94/go.mod h1:IXLxlkahEAEgpCmu9Xa/Wmjo6ja4Aoq7tf8G7VrileE= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=