From dfbf73f2fdf98d3cbdc078242402aaa4021390ed Mon Sep 17 00:00:00 2001 From: Ales Rechtorik Date: Sun, 5 Apr 2026 21:09:16 +0200 Subject: [PATCH 1/3] add --location flag to project create command Allows customers to specify the project location (e.g. eu-central, us-east) when creating a project via zcli. Defaults to eu-central. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/cmd/projectCreate.go | 3 +++ src/entity/project.go | 2 ++ src/entity/repository/project.go | 1 + 3 files changed, 6 insertions(+) diff --git a/src/cmd/projectCreate.go b/src/cmd/projectCreate.go index 40c989e..b12832b 100644 --- a/src/cmd/projectCreate.go +++ b/src/cmd/projectCreate.go @@ -16,6 +16,7 @@ import ( "github.com/zeropsio/zcli/src/uxHelpers" "github.com/zeropsio/zerops-go/types" "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/stringId" "github.com/zeropsio/zerops-go/types/uuid" ) @@ -34,6 +35,7 @@ func projectCreateCmd() *cmdBuilder.Cmd { StringFlag("mode", enumDefaultForFlag(enum.ProjectModeEnumLight), "Project mode"+enumValuesForFlag(enum.ProjectModeEnumAllPublic())). StringFlag("env-isolation", "service", "Env isolation rule [service, none] for more info see docs https://docs.zerops.io/features/env-variables#isolation-modes"). StringFlag("ssh-isolation", "vpn", "SSH isolation rules, for more info see docs https://docs.zerops.io/references/ssh#ssh-access-control"). + StringFlag("location", "eu-central", "Project location (e.g. eu-central, us-east)"). HelpFlag("Help for the project create command."). LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { var err error @@ -115,6 +117,7 @@ func projectCreateCmd() *cmdBuilder.Cmd { Mode: enum.ProjectModeEnum(mode), SshIsolation: types.NewStringNull(cmdData.Params.GetString("ssh-isolation")), EnvIsolation: types.NewStringNull(cmdData.Params.GetString("env-isolation")), + Location: stringId.NewLocationIdNullFromString(cmdData.Params.GetString("location")), }) if err != nil { return err diff --git a/src/entity/project.go b/src/entity/project.go index c9cca84..cc78384 100644 --- a/src/entity/project.go +++ b/src/entity/project.go @@ -3,6 +3,7 @@ package entity import ( "github.com/zeropsio/zerops-go/types" "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/stringId" "github.com/zeropsio/zerops-go/types/uuid" ) @@ -25,4 +26,5 @@ type PostProject struct { Mode enum.ProjectModeEnum SshIsolation types.StringNull EnvIsolation types.StringNull + Location stringId.LocationIdNull } diff --git a/src/entity/repository/project.go b/src/entity/repository/project.go index 905ac5d..5df1f68 100644 --- a/src/entity/repository/project.go +++ b/src/entity/repository/project.go @@ -83,6 +83,7 @@ func PostProject( TagList: post.Tags, SshIsolation: post.SshIsolation, EnvIsolation: post.EnvIsolation, + Location: post.Location, } if postBody.TagList == nil { postBody.TagList = make(types.StringArray, 0) From 6843c0999b092c95fa4a9eabbc441fcee261fe1c Mon Sep 17 00:00:00 2001 From: Ales Rechtorik Date: Sun, 5 Apr 2026 21:12:41 +0200 Subject: [PATCH 2/3] don't send location when flag not set, mention default in help Co-Authored-By: Claude Opus 4.6 (1M context) --- src/cmd/projectCreate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/projectCreate.go b/src/cmd/projectCreate.go index b12832b..d81aa5c 100644 --- a/src/cmd/projectCreate.go +++ b/src/cmd/projectCreate.go @@ -35,7 +35,7 @@ func projectCreateCmd() *cmdBuilder.Cmd { StringFlag("mode", enumDefaultForFlag(enum.ProjectModeEnumLight), "Project mode"+enumValuesForFlag(enum.ProjectModeEnumAllPublic())). StringFlag("env-isolation", "service", "Env isolation rule [service, none] for more info see docs https://docs.zerops.io/features/env-variables#isolation-modes"). StringFlag("ssh-isolation", "vpn", "SSH isolation rules, for more info see docs https://docs.zerops.io/references/ssh#ssh-access-control"). - StringFlag("location", "eu-central", "Project location (e.g. eu-central, us-east)"). + StringFlag("location", "", "Project location (e.g. us-east, defaults to eu-central)"). HelpFlag("Help for the project create command."). LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { var err error From bbd38052a262a462b70ef4dd5af1d900e41e1702 Mon Sep 17 00:00:00 2001 From: Ales Rechtorik Date: Sun, 5 Apr 2026 21:13:02 +0200 Subject: [PATCH 3/3] only set Location when --location flag is provided Avoid sending empty string to API; let server apply its default when the flag is not set. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/cmd/projectCreate.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cmd/projectCreate.go b/src/cmd/projectCreate.go index d81aa5c..0a70391 100644 --- a/src/cmd/projectCreate.go +++ b/src/cmd/projectCreate.go @@ -110,15 +110,19 @@ func projectCreateCmd() *cmdBuilder.Cmd { return errors.New("Must specify name with --name") } - project, err := repository.PostProject(ctx, cmdData.RestApiClient, entity.PostProject{ + postProject := entity.PostProject{ OrgId: org.Id, Name: types.NewString(name), Tags: cmdData.Params.GetStringSlice("tags"), Mode: enum.ProjectModeEnum(mode), SshIsolation: types.NewStringNull(cmdData.Params.GetString("ssh-isolation")), EnvIsolation: types.NewStringNull(cmdData.Params.GetString("env-isolation")), - Location: stringId.NewLocationIdNullFromString(cmdData.Params.GetString("location")), - }) + } + if loc := cmdData.Params.GetString("location"); loc != "" { + postProject.Location = stringId.NewLocationIdNullFromString(loc) + } + + project, err := repository.PostProject(ctx, cmdData.RestApiClient, postProject) if err != nil { return err }