diff --git a/README.md b/README.md index 98b4c031..22993473 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Zerops zCLI +~[Zerops](https://github.com/zeropsio/recipe-shared-assets/blob/main/covers/svg/cover-zcli.svg) Zerops zCLI is a command line utility for working with [zerops.io](https://zerops.io). It's used for **CI/CD** development and CLI lovers. diff --git a/src/cmd/project.go b/src/cmd/project.go index c494b836..4ea822b8 100644 --- a/src/cmd/project.go +++ b/src/cmd/project.go @@ -13,5 +13,6 @@ func projectCmd() *cmdBuilder.Cmd { AddChildrenCmd(projectListCmd()). AddChildrenCmd(projectDeleteCmd()). AddChildrenCmd(projectServiceImportCmd()). - AddChildrenCmd(projectImportCmd()) + AddChildrenCmd(projectImportCmd()). + AddChildrenCmd(projectCreateCmd()) } diff --git a/src/cmd/projectCreate.go b/src/cmd/projectCreate.go new file mode 100644 index 00000000..7645f472 --- /dev/null +++ b/src/cmd/projectCreate.go @@ -0,0 +1,45 @@ +package cmd + +import ( + "context" + + "github.com/pkg/errors" + + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/sdk" +) + +func projectCreateCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("create"). + Short(i18n.T(i18n.CmdDescProjectCreate)). + ScopeLevel(scope.Project). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + BoolFlag("confirm", false, i18n.T(i18n.ConfirmFlag)). + HelpFlag(i18n.T(i18n.CmdHelpProjectCreate)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + if !cmdData.Params.GetBool("confirm") { + confirmed, err := uxHelpers.YesNoPrompt( + ctx, + cmdData.UxBlocks, + i18n.T(i18n.ProjectCreateConfirm, cmdData.Project.Name), + ) + if err != nil { + return err + } + if !confirmed { + return errors.New(i18n.T(i18n.DestructiveOperationConfirmationFailed)) + } + } + + sdk.Handler{}.PostProject(ctx, body.PostProject{ + Name: cmdData.Project.Name, + }) + + return nil + }) +}