From 76437ff58009063c059d4e2e94ccda9151e86317 Mon Sep 17 00:00:00 2001 From: Michael Leone Date: Wed, 21 Jan 2026 13:03:02 -0500 Subject: [PATCH 1/2] feat: add ctrlc api get commands (#5) * add environments list * add systems list * add deployments list * removed unused query params * renamed file and systems command to be spelled correctly --- .../root/api/get/deployments/deployments.go | 59 +++++++++++++++++++ .../root/api/get/environments/environments.go | 59 +++++++++++++++++++ cmd/ctrlc/root/api/get/get.go | 6 ++ cmd/ctrlc/root/api/get/systems/systems.go | 59 +++++++++++++++++++ 4 files changed, 183 insertions(+) create mode 100644 cmd/ctrlc/root/api/get/deployments/deployments.go create mode 100644 cmd/ctrlc/root/api/get/environments/environments.go create mode 100644 cmd/ctrlc/root/api/get/systems/systems.go diff --git a/cmd/ctrlc/root/api/get/deployments/deployments.go b/cmd/ctrlc/root/api/get/deployments/deployments.go new file mode 100644 index 0000000..5da93af --- /dev/null +++ b/cmd/ctrlc/root/api/get/deployments/deployments.go @@ -0,0 +1,59 @@ +package deployments + +import ( + "fmt" + + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewDeploymentsCmd() *cobra.Command { + var limit int + var offset int + + cmd := &cobra.Command{ + Use: "deployments", + Short: "Get deployments", + Long: `Commands for getting deployments.`, + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspace := viper.GetString("workspace") + + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + workspaceID := client.GetWorkspaceID(cmd.Context(), workspace) + + if workspaceID.String() == "00000000-0000-0000-0000-000000000000" { + return fmt.Errorf("invalid workspace: %s", workspace) + } + + params := &api.ListDeploymentsParams{} + if limit > 0 { + params.Limit = &limit + } + if offset > 0 { + params.Offset = &offset + } + + resp, err := client.ListDeployments(cmd.Context(), workspaceID.String(), params) + if err != nil { + return fmt.Errorf("failed to get resources: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + cmd.Flags().IntVarP(&limit, "limit", "l", 50, "Limit the number of results") + cmd.Flags().IntVarP(&offset, "offset", "o", 0, "Offset the results") + + cmd.MarkFlagRequired("workspace") + + return cmd +} diff --git a/cmd/ctrlc/root/api/get/environments/environments.go b/cmd/ctrlc/root/api/get/environments/environments.go new file mode 100644 index 0000000..83999cf --- /dev/null +++ b/cmd/ctrlc/root/api/get/environments/environments.go @@ -0,0 +1,59 @@ +package environments + +import ( + "fmt" + + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewEnvironmentsCmd() *cobra.Command { + var limit int + var offset int + + cmd := &cobra.Command{ + Use: "environments", + Short: "Get environments", + Long: `Commands for getting environments.`, + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspace := viper.GetString("workspace") + + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + workspaceID := client.GetWorkspaceID(cmd.Context(), workspace) + + if workspaceID.String() == "00000000-0000-0000-0000-000000000000" { + return fmt.Errorf("invalid workspace: %s", workspace) + } + + params := &api.ListEnvironmentsParams{} + if limit > 0 { + params.Limit = &limit + } + if offset > 0 { + params.Offset = &offset + } + + resp, err := client.ListEnvironments(cmd.Context(), workspaceID.String(), params) + if err != nil { + return fmt.Errorf("failed to get resources: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + cmd.Flags().IntVarP(&limit, "limit", "l", 50, "Limit the number of results") + cmd.Flags().IntVarP(&offset, "offset", "o", 0, "Offset the results") + + cmd.MarkFlagRequired("workspace") + + return cmd +} diff --git a/cmd/ctrlc/root/api/get/get.go b/cmd/ctrlc/root/api/get/get.go index 4f391a8..f90e472 100644 --- a/cmd/ctrlc/root/api/get/get.go +++ b/cmd/ctrlc/root/api/get/get.go @@ -1,8 +1,11 @@ package get import ( + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/deployments" + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/environments" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/release" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/resources" + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/get/systems" "github.com/spf13/cobra" ) @@ -18,6 +21,9 @@ func NewGetCmd() *cobra.Command { cmd.AddCommand(resources.NewResourcesCmd()) cmd.AddCommand(release.NewReleaseCmd()) + cmd.AddCommand(environments.NewEnvironmentsCmd()) + cmd.AddCommand(systems.NewSystemsCmd()) + cmd.AddCommand(deployments.NewDeploymentsCmd()) return cmd } diff --git a/cmd/ctrlc/root/api/get/systems/systems.go b/cmd/ctrlc/root/api/get/systems/systems.go new file mode 100644 index 0000000..f0195e8 --- /dev/null +++ b/cmd/ctrlc/root/api/get/systems/systems.go @@ -0,0 +1,59 @@ +package systems + +import ( + "fmt" + + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewSystemsCmd() *cobra.Command { + var limit int + var offset int + + cmd := &cobra.Command{ + Use: "systems", + Short: "Get systems", + Long: `Commands for getting systems.`, + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + workspace := viper.GetString("workspace") + + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + workspaceID := client.GetWorkspaceID(cmd.Context(), workspace) + + if workspaceID.String() == "00000000-0000-0000-0000-000000000000" { + return fmt.Errorf("invalid workspace: %s", workspace) + } + + params := &api.ListSystemsParams{} + if limit > 0 { + params.Limit = &limit + } + if offset > 0 { + params.Offset = &offset + } + + resp, err := client.ListSystems(cmd.Context(), workspaceID.String(), params) + if err != nil { + return fmt.Errorf("failed to get resources: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + cmd.Flags().IntVarP(&limit, "limit", "l", 50, "Limit the number of results") + cmd.Flags().IntVarP(&offset, "offset", "o", 0, "Offset the results") + + cmd.MarkFlagRequired("workspace") + + return cmd +} From 92feefe2dc30f626d296e31402599725a486fb2a Mon Sep 17 00:00:00 2001 From: Michael Leone Date: Thu, 22 Jan 2026 15:06:29 -0500 Subject: [PATCH 2/2] fix: correct resource in err msg --- cmd/ctrlc/root/api/get/deployments/deployments.go | 2 +- cmd/ctrlc/root/api/get/environments/environments.go | 2 +- cmd/ctrlc/root/api/get/systems/systems.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/ctrlc/root/api/get/deployments/deployments.go b/cmd/ctrlc/root/api/get/deployments/deployments.go index 5da93af..de69d8c 100644 --- a/cmd/ctrlc/root/api/get/deployments/deployments.go +++ b/cmd/ctrlc/root/api/get/deployments/deployments.go @@ -43,7 +43,7 @@ func NewDeploymentsCmd() *cobra.Command { resp, err := client.ListDeployments(cmd.Context(), workspaceID.String(), params) if err != nil { - return fmt.Errorf("failed to get resources: %w", err) + return fmt.Errorf("failed to get deployments: %w", err) } return cliutil.HandleResponseOutput(cmd, resp) diff --git a/cmd/ctrlc/root/api/get/environments/environments.go b/cmd/ctrlc/root/api/get/environments/environments.go index 83999cf..c9f2929 100644 --- a/cmd/ctrlc/root/api/get/environments/environments.go +++ b/cmd/ctrlc/root/api/get/environments/environments.go @@ -43,7 +43,7 @@ func NewEnvironmentsCmd() *cobra.Command { resp, err := client.ListEnvironments(cmd.Context(), workspaceID.String(), params) if err != nil { - return fmt.Errorf("failed to get resources: %w", err) + return fmt.Errorf("failed to get environments: %w", err) } return cliutil.HandleResponseOutput(cmd, resp) diff --git a/cmd/ctrlc/root/api/get/systems/systems.go b/cmd/ctrlc/root/api/get/systems/systems.go index f0195e8..8db5308 100644 --- a/cmd/ctrlc/root/api/get/systems/systems.go +++ b/cmd/ctrlc/root/api/get/systems/systems.go @@ -43,7 +43,7 @@ func NewSystemsCmd() *cobra.Command { resp, err := client.ListSystems(cmd.Context(), workspaceID.String(), params) if err != nil { - return fmt.Errorf("failed to get resources: %w", err) + return fmt.Errorf("failed to get systems: %w", err) } return cliutil.HandleResponseOutput(cmd, resp)