From 22f1c88d3e72f428f4fdd09ceb3e605466179ee3 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (WICRESOFT NORTH AMERICA LTD)" Date: Fri, 21 Feb 2025 10:50:14 +0800 Subject: [PATCH 01/14] confirm before automatically setting a new environment as the default --- cli/azd/cmd/env.go | 19 ++++++++++++++++--- cli/azd/pkg/environment/manager.go | 19 +++++++++++++++++-- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index 10a8a7f101f..33f1d23718c 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -658,9 +658,22 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) if err != nil { return nil, fmt.Errorf("creating new environment: %w", err) } - - if err := en.azdCtx.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { - return nil, fmt.Errorf("saving default environment: %w", err) + msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) + shouldSetDefault, promptErr := en.console.Confirm(ctx, input.ConsoleOptions{ + Message: msg, + DefaultValue: true, + }) + if promptErr != nil { + return nil, fmt.Errorf("prompting to set environment '%s' as default environment: %w", env.Name(), promptErr) + } + if shouldSetDefault { + if err := en.azdCtx.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { + return nil, fmt.Errorf("saving default environment: %w", err) + } + en.console.Message(ctx, + fmt.Sprintf( + "The new environment '%s' has been set as the default environment.", env.Name()), + ) } return nil, nil diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index 1fd93ded735..c460258afd5 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -178,8 +178,23 @@ func (m *manager) LoadOrInitInteractive(ctx context.Context, environmentName str return nil, err } - if err := m.azdContext.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { - return nil, fmt.Errorf("saving default environment: %w", err) + m.console.Message(ctx, "") + msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) + shouldSetDefault, promptErr := m.console.Confirm(ctx, input.ConsoleOptions{ + Message: msg, + DefaultValue: true, + }) + if promptErr != nil { + return nil, fmt.Errorf("prompting to set environment '%s' as default environment: %w", env.Name(), promptErr) + } + if shouldSetDefault { + if err := m.azdContext.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { + return nil, fmt.Errorf("saving default environment: %w", err) + } + m.console.Message(ctx, + fmt.Sprintf( + "The new environment '%s' has been set as the default environment.", env.Name()), + ) } } From 4222492c1c452f18b027de94a43b6b9533635fdb Mon Sep 17 00:00:00 2001 From: "Menghua Chen (WICRESOFT NORTH AMERICA LTD)" Date: Fri, 21 Feb 2025 11:32:34 +0800 Subject: [PATCH 02/14] fix ci error --- cli/azd/pkg/environment/manager_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cli/azd/pkg/environment/manager_test.go b/cli/azd/pkg/environment/manager_test.go index 04ac898e9c3..624652d5a26 100644 --- a/cli/azd/pkg/environment/manager_test.go +++ b/cli/azd/pkg/environment/manager_test.go @@ -80,6 +80,10 @@ func Test_EnvManager_PromptEnvironmentName(t *testing.T) { return strings.Contains(options.Message, "would you like to create it?") }).Respond(true) + mockContext.Console.WhenConfirm(func(options input.ConsoleOptions) bool { + return strings.Contains(options.Message, "Would you like to set the new environment") + }).Respond(true) + mockContext.Console.WhenPrompt(func(options input.ConsoleOptions) bool { return true }).SetError(errors.New("prompt should not be called for valid environment name")) @@ -106,6 +110,10 @@ func Test_EnvManager_PromptEnvironmentName(t *testing.T) { return true }).Respond(expected) + mockContext.Console.WhenConfirm(func(options input.ConsoleOptions) bool { + return strings.Contains(options.Message, "Would you like to set the new environment") + }).Respond(true) + envManager := createEnvManagerForManagerTest(t, mockContext) env, err := envManager.LoadOrInitInteractive(*mockContext.Context, "") From 2afe8f20d189d8a71c7b89ed24dfdeed995b9566 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (WICRESOFT NORTH AMERICA LTD)" Date: Fri, 21 Feb 2025 15:07:12 +0800 Subject: [PATCH 03/14] fix ci error --- cli/azd/test/functional/env_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/azd/test/functional/env_test.go b/cli/azd/test/functional/env_test.go index ebff94a1ab9..4ff17220b01 100644 --- a/cli/azd/test/functional/env_test.go +++ b/cli/azd/test/functional/env_test.go @@ -121,7 +121,7 @@ func Test_CLI_Env_Management(t *testing.T) { envName3 := randomEnvName() _, _ = cli.RunCommandWithStdIn( ctx, - "Create a new environment\n"+envName3+"\n", + "Create a new environment\n"+envName3+"\ny\n", cmdNeedingEnv...) environmentList = envList(ctx, t, cli) require.Len(t, environmentList, 3) @@ -329,10 +329,10 @@ func envNew(ctx context.Context, t *testing.T, cli *azdcli.CLI, envName string, if usePrompt { runArgs := append(defaultArgs, args...) - _, err := cli.RunCommandWithStdIn(ctx, envName+"\n", runArgs...) + _, err := cli.RunCommandWithStdIn(ctx, envName+"\ny\n", runArgs...) require.NoError(t, err) } else { - runArgs := append(defaultArgs, envName, "--subscription", cfg.SubscriptionID, "-l", cfg.Location) + runArgs := append(defaultArgs, envName, "--no-prompt", "--subscription", cfg.SubscriptionID, "-l", cfg.Location) runArgs = append(runArgs, args...) _, err := cli.RunCommand(ctx, runArgs...) require.NoError(t, err) From 5e64b6603c7c59e063b10f52b0089df3781fc6a4 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (WICRESOFT NORTH AMERICA LTD)" Date: Fri, 21 Feb 2025 17:22:12 +0800 Subject: [PATCH 04/14] fix ci error --- cli/azd/test/functional/env_refresh_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/test/functional/env_refresh_test.go b/cli/azd/test/functional/env_refresh_test.go index 4d94e550028..5e7962b329f 100644 --- a/cli/azd/test/functional/env_refresh_test.go +++ b/cli/azd/test/functional/env_refresh_test.go @@ -53,7 +53,7 @@ func Test_CLI_EnvRefresh_NoBicep(t *testing.T) { require.NoError(t, os.Rename(infraPath, infraPathHidden)) // Reuse same environment name - _, err = cli.RunCommandWithStdIn(ctx, envName+"\n", "env", "refresh") + _, err = cli.RunCommandWithStdIn(ctx, envName+"\ny\n", "env", "refresh") require.NoError(t, err) env, err := envFromAzdRoot(ctx, dir, envName) From ec5d5d23d37659ae099d91b19a76096fec4dc147 Mon Sep 17 00:00:00 2001 From: Menghua1 Date: Thu, 15 May 2025 15:36:09 +0800 Subject: [PATCH 05/14] Skip prompt if only one environment; if !shouldSetDefault, add display un-changed default environment --- cli/azd/cmd/env.go | 46 +++++++++++++++++++++++------- cli/azd/pkg/environment/manager.go | 45 ++++++++++++++++++++++------- 2 files changed, 70 insertions(+), 21 deletions(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index 33f1d23718c..d36baab79d9 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -658,22 +658,48 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) if err != nil { return nil, fmt.Errorf("creating new environment: %w", err) } - msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) - shouldSetDefault, promptErr := en.console.Confirm(ctx, input.ConsoleOptions{ - Message: msg, - DefaultValue: true, - }) - if promptErr != nil { - return nil, fmt.Errorf("prompting to set environment '%s' as default environment: %w", env.Name(), promptErr) + + envs, err := en.envManager.List(ctx) + if err != nil { + return nil, fmt.Errorf("listing environments: %w", err) } - if shouldSetDefault { + + if len(envs) == 1 { + // If this is the only environment, set it as the default environment if err := en.azdCtx.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { return nil, fmt.Errorf("saving default environment: %w", err) } en.console.Message(ctx, - fmt.Sprintf( - "The new environment '%s' has been set as the default environment.", env.Name()), + fmt.Sprintf("The new environment '%s' has been set as the default environment.", env.Name()), ) + } else { + // Ask the user if they want to set the new environment as the default environment + msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) + shouldSetDefault, promptErr := en.console.Confirm(ctx, input.ConsoleOptions{ + Message: msg, + DefaultValue: true, + }) + + if promptErr != nil { + return nil, fmt.Errorf("prompting to set environment '%s' as default environment: %w", env.Name(), promptErr) + } + + if shouldSetDefault { + if err := en.azdCtx.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { + return nil, fmt.Errorf("saving default environment: %w", err) + } + en.console.Message(ctx, + fmt.Sprintf("\nThe new environment '%s' has been set as the default environment.", env.Name()), + ) + } else { + defaultEnvironment, err := en.azdCtx.GetDefaultEnvironmentName() + if err != nil { + return nil, fmt.Errorf("get default environment: %w", err) + } + en.console.Message(ctx, + fmt.Sprintf("\nThe default environment was not changed and it is '%s'.", defaultEnvironment), + ) + } } return nil, nil diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index c460258afd5..d6e70f2572e 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -178,23 +178,46 @@ func (m *manager) LoadOrInitInteractive(ctx context.Context, environmentName str return nil, err } - m.console.Message(ctx, "") - msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) - shouldSetDefault, promptErr := m.console.Confirm(ctx, input.ConsoleOptions{ - Message: msg, - DefaultValue: true, - }) - if promptErr != nil { - return nil, fmt.Errorf("prompting to set environment '%s' as default environment: %w", env.Name(), promptErr) + envs, err := m.List(ctx) + if err != nil { + return nil, fmt.Errorf("listing environments: %w", err) } - if shouldSetDefault { + // If this is the only environment, set it as the default environment + if len(envs) == 1 { if err := m.azdContext.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { return nil, fmt.Errorf("saving default environment: %w", err) } m.console.Message(ctx, - fmt.Sprintf( - "The new environment '%s' has been set as the default environment.", env.Name()), + fmt.Sprintf("\nThe new environment '%s' has been set as the default environment.", env.Name()), ) + } else { + // Ask the user if they want to set the new environment as the default environment + msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) + shouldSetDefault, promptErr := m.console.Confirm(ctx, input.ConsoleOptions{ + Message: msg, + DefaultValue: true, + }) + + if promptErr != nil { + return nil, fmt.Errorf("prompting to set environment '%s' as default environment: %w", env.Name(), promptErr) + } + + if shouldSetDefault { + if err := m.azdContext.SetProjectState(azdcontext.ProjectState{DefaultEnvironment: env.Name()}); err != nil { + return nil, fmt.Errorf("saving default environment: %w", err) + } + m.console.Message(ctx, + fmt.Sprintf("\nThe new environment '%s' has been set as the default environment.", env.Name()), + ) + } else { + defaultEnvironment, err := m.azdContext.GetDefaultEnvironmentName() + if err != nil { + return nil, fmt.Errorf("get default environment: %w", err) + } + m.console.Message(ctx, + fmt.Sprintf("\nThe default environment was not changed and it is '%s'.", defaultEnvironment), + ) + } } } From 678e50ef5520a889b7a454e54a9ba7749f700525 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:40:56 +0800 Subject: [PATCH 06/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/cmd/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index d36baab79d9..b21913bc910 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -689,7 +689,7 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) return nil, fmt.Errorf("saving default environment: %w", err) } en.console.Message(ctx, - fmt.Sprintf("\nThe new environment '%s' has been set as the default environment.", env.Name()), + fmt.Sprintf("\nNew environment '%s' created and set as default", env.Name()), ) } else { defaultEnvironment, err := en.azdCtx.GetDefaultEnvironmentName() From 015dcd50b12f69c07651548e7a2f61a4e05769f8 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:41:26 +0800 Subject: [PATCH 07/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/cmd/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index b21913bc910..86b42656513 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -674,7 +674,7 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) ) } else { // Ask the user if they want to set the new environment as the default environment - msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) + msg := fmt.Sprintf("Set new environment '%s' as default environment?", env.Name()) shouldSetDefault, promptErr := en.console.Confirm(ctx, input.ConsoleOptions{ Message: msg, DefaultValue: true, From f992947492ff5fee791df20d4d8c680d1f3e2394 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:41:43 +0800 Subject: [PATCH 08/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/cmd/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index 86b42656513..63ea3748285 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -670,7 +670,7 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) return nil, fmt.Errorf("saving default environment: %w", err) } en.console.Message(ctx, - fmt.Sprintf("The new environment '%s' has been set as the default environment.", env.Name()), + fmt.Sprintf("New environment '%s' was set as default", env.Name()), ) } else { // Ask the user if they want to set the new environment as the default environment From f82522ca4bd34464a385008f9be0b10cd6d5d06c Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:41:58 +0800 Subject: [PATCH 09/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/pkg/environment/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index d6e70f2572e..32633c2ac61 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -188,7 +188,7 @@ func (m *manager) LoadOrInitInteractive(ctx context.Context, environmentName str return nil, fmt.Errorf("saving default environment: %w", err) } m.console.Message(ctx, - fmt.Sprintf("\nThe new environment '%s' has been set as the default environment.", env.Name()), + fmt.Sprintf("\nNew environment '%s' created and set as default", env.Name()), ) } else { // Ask the user if they want to set the new environment as the default environment From c46d782f9d19207c44a205efd8aed746e0bc1c8c Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:42:12 +0800 Subject: [PATCH 10/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/cmd/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index 63ea3748285..b37597f8620 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -697,7 +697,7 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) return nil, fmt.Errorf("get default environment: %w", err) } en.console.Message(ctx, - fmt.Sprintf("\nThe default environment was not changed and it is '%s'.", defaultEnvironment), + fmt.Sprintf("\nNew env '%s' created, default environment remails '%s'", env.Name(), defaultEnvironment), ) } } From a95b49d73b39a57a74e8c0088c1f8d3aefbf2d45 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:42:24 +0800 Subject: [PATCH 11/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/pkg/environment/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index 32633c2ac61..0ab536d5a30 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -192,7 +192,7 @@ func (m *manager) LoadOrInitInteractive(ctx context.Context, environmentName str ) } else { // Ask the user if they want to set the new environment as the default environment - msg := fmt.Sprintf("Would you like to set the new environment '%s' as default environment?", env.Name()) + msg := fmt.Sprintf("Set new environment '%s' as default environment?", env.Name()) shouldSetDefault, promptErr := m.console.Confirm(ctx, input.ConsoleOptions{ Message: msg, DefaultValue: true, From 64e8e8c23d86b146e855fd7702a768bc639cd972 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:42:36 +0800 Subject: [PATCH 12/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/pkg/environment/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index 0ab536d5a30..b8312ba18f3 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -207,7 +207,7 @@ func (m *manager) LoadOrInitInteractive(ctx context.Context, environmentName str return nil, fmt.Errorf("saving default environment: %w", err) } m.console.Message(ctx, - fmt.Sprintf("\nThe new environment '%s' has been set as the default environment.", env.Name()), + fmt.Sprintf("\nNew environment '%s' created and set as default.", env.Name()), ) } else { defaultEnvironment, err := m.azdContext.GetDefaultEnvironmentName() From 2f230b4196d24497f873c96de235aa6876a36551 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:42:44 +0800 Subject: [PATCH 13/14] Streamlined some of the wording Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/pkg/environment/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index b8312ba18f3..f7b81418cf9 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -215,7 +215,7 @@ func (m *manager) LoadOrInitInteractive(ctx context.Context, environmentName str return nil, fmt.Errorf("get default environment: %w", err) } m.console.Message(ctx, - fmt.Sprintf("\nThe default environment was not changed and it is '%s'.", defaultEnvironment), + fmt.Sprintf("\nNew env '%s' created, default environment remains '%s'.", env.Name(), defaultEnvironment), ) } } From 46f0f2222c2a90861011d3c6a7a9230f88f101c5 Mon Sep 17 00:00:00 2001 From: "Menghua Chen (MSFT)" <111940661+Menghua1@users.noreply.github.com> Date: Thu, 19 Jun 2025 10:12:12 +0800 Subject: [PATCH 14/14] Update cli/azd/cmd/env.go Co-authored-by: Sophia Carpenter <103968777+SophCarp@users.noreply.github.com> --- cli/azd/cmd/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/cmd/env.go b/cli/azd/cmd/env.go index 93989f4195d..e61d6f2c760 100644 --- a/cli/azd/cmd/env.go +++ b/cli/azd/cmd/env.go @@ -919,7 +919,7 @@ func (en *envNewAction) Run(ctx context.Context) (*actions.ActionResult, error) return nil, fmt.Errorf("get default environment: %w", err) } en.console.Message(ctx, - fmt.Sprintf("\nNew env '%s' created, default environment remails '%s'", env.Name(), defaultEnvironment), + fmt.Sprintf("\nNew env '%s' created, default environment remains '%s'", env.Name(), defaultEnvironment), ) } }