diff --git a/internal/cmd/stack/enable.go b/internal/cmd/stack/enable.go new file mode 100644 index 0000000..6aea3a6 --- /dev/null +++ b/internal/cmd/stack/enable.go @@ -0,0 +1,47 @@ +package stack + +import ( + "fmt" + + "github.com/shurcooL/graphql" + "github.com/spacelift-io/spacectl/internal/cmd/authenticated" + "github.com/urfave/cli/v2" +) + +type ( + stackEnableMutation struct { + Stack struct { + ID string `graphql:"id"` + Disabled bool `graphql:"isDisabled"` + } `graphql:"stackEnable(id: $stack)"` + } + stackDisableMutation struct { + Stack struct { + ID string `graphql:"id"` + Disabled bool `graphql:"isDisabled"` + } `graphql:"stackDisable(id: $stack)"` + } +) + +func enable(cliCtx *cli.Context) error { + return enableDisable[stackEnableMutation](cliCtx) +} + +func disable(cliCtx *cli.Context) error { + return enableDisable[stackDisableMutation](cliCtx) +} + +func enableDisable[T any](cliCtx *cli.Context) error { + stackID := cliCtx.String(flagStackID.Name) + + if nArgs := cliCtx.NArg(); nArgs != 0 { + return fmt.Errorf("expected zero arguments but got %d", nArgs) + } + + var mutation T + variables := map[string]interface{}{ + "stack": graphql.ID(stackID), + } + + return authenticated.Client.Mutate(cliCtx.Context, &mutation, variables) +} diff --git a/internal/cmd/stack/stack.go b/internal/cmd/stack/stack.go index 62d3826..6e2736b 100644 --- a/internal/cmd/stack/stack.go +++ b/internal/cmd/stack/stack.go @@ -291,6 +291,28 @@ func Command() *cli.Command { Before: authenticated.Ensure, ArgsUsage: cmd.EmptyArgsUsage, }, + { + Category: "Stack management", + Name: "enable", + Usage: "Enable new runs against the stack", + Flags: []cli.Flag{ + flagStackID, + }, + Action: enable, + Before: authenticated.Ensure, + ArgsUsage: cmd.EmptyArgsUsage, + }, + { + Category: "Stack management", + Name: "disable", + Usage: "Disable new runs against the stack", + Flags: []cli.Flag{ + flagStackID, + }, + Action: disable, + Before: authenticated.Ensure, + ArgsUsage: cmd.EmptyArgsUsage, + }, }, } }