From 7400c4b963b4cce2f1aca0bcbd9ad803d447398e Mon Sep 17 00:00:00 2001 From: aryansharma9917 Date: Tue, 2 Jun 2026 21:48:49 +0530 Subject: [PATCH 1/2] feat(env): implement interactive CreateEnv prompts Signed-off-by: aryansharma9917 --- pkg/env/create.go | 64 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/pkg/env/create.go b/pkg/env/create.go index 2f80e21..6ce2198 100644 --- a/pkg/env/create.go +++ b/pkg/env/create.go @@ -6,6 +6,7 @@ import ( "path/filepath" "github.com/aryansharma9917/codewise-cli/pkg/config" + survey "github.com/AlecAivazis/survey/v2" "gopkg.in/yaml.v3" ) @@ -15,12 +16,71 @@ type CreateOptions struct { func CreateEnv(name string, opts CreateOptions) error { if opts.Interactive { - // handled at CLI layer - return fmt.Errorf("interactive mode not implemented in CreateEnv") + cfg, _ := config.ReadConfig() + + defaultNs := inferOrDefault(cfg.Defaults.Namespace, name) + defaultCtx := inferOrDefault(cfg.Defaults.Context, "") + defaultRepo := inferOrDefault(cfg.Defaults.RepoURL, "") + defaultBranch := inferOrDefault(cfg.Defaults.Branch, "main") + defaultImage := inferOrDefault(cfg.Defaults.Image, "codewise") + defaultTag := inferOrDefault(cfg.Defaults.ImageTag, "latest") + + answers := struct { + Namespace string + Context string + Repo string + Branch string + Image string + Tag string + }{} + + qs := []*survey.Question{ + {Name: "Namespace", Prompt: &survey.Input{Message: fmt.Sprintf("Namespace (default: %s)", defaultNs)}}, + {Name: "Context", Prompt: &survey.Input{Message: fmt.Sprintf("Kubernetes context (default: %s)", defaultCtx)}}, + {Name: "Repo", Prompt: &survey.Input{Message: fmt.Sprintf("GitOps repo (default: %s)", defaultRepo)}}, + {Name: "Branch", Prompt: &survey.Input{Message: fmt.Sprintf("GitOps branch (default: %s)", defaultBranch)}}, + {Name: "Image", Prompt: &survey.Input{Message: fmt.Sprintf("Image repository (default: %s)", defaultImage)}}, + {Name: "Tag", Prompt: &survey.Input{Message: fmt.Sprintf("Image tag (default: %s)", defaultTag)}}, + } + + if err := survey.Ask(qs, &answers); err != nil { + return err + } + + k8s := K8sConfig{ + Namespace: firstNonEmpty(answers.Namespace, defaultNs), + Context: firstNonEmpty(answers.Context, defaultCtx), + } + + helm := HelmConfig{ + Release: name, + Chart: "./helm/chart", + Values: "./values.yaml", + } + + gitops := GitOpsConfig{ + Repo: firstNonEmpty(answers.Repo, defaultRepo), + Path: "", + Branch: firstNonEmpty(answers.Branch, defaultBranch), + } + + values := ValuesConfig{} + values.Image.Repository = firstNonEmpty(answers.Image, defaultImage) + values.Image.Tag = firstNonEmpty(answers.Tag, defaultTag) + + return CreateEnvFromParts(name, k8s, helm, gitops, values) } + return createSilent(name) } +func firstNonEmpty(a, b string) string { + if a != "" { + return a + } + return b +} + func createSilent(name string) error { if err := ensureBaseDir(); err != nil { return err From b0fa156de2120b2c0ea1444bdc079e4891eac8bf Mon Sep 17 00:00:00 2001 From: aryansharma9917 Date: Tue, 2 Jun 2026 21:49:54 +0530 Subject: [PATCH 2/2] fix(cmd): use formatted LogSuccess in preview deploy Signed-off-by: aryansharma9917 --- cmd/deploy_preview.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/deploy_preview.go b/cmd/deploy_preview.go index 05681e9..b573a2d 100644 --- a/cmd/deploy_preview.go +++ b/cmd/deploy_preview.go @@ -53,7 +53,7 @@ var deployPreviewCmd = &cobra.Command{ defer func() { if previewKeep { - LogSuccess("preview environment kept: " + name) + LogSuccess("preview environment kept: %s", name) return } // best-effort cleanup @@ -68,7 +68,7 @@ var deployPreviewCmd = &cobra.Command{ return LogErrorf("preview deploy failed: %v", err) } - LogSuccess("preview deployment complete: " + name) + LogSuccess("preview deployment complete: %s", name) return nil }, }