From 7e2b111570564a2b3ac4639ccc5fcd94acf6e80c Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Wed, 10 Dec 2025 16:20:37 +0100 Subject: [PATCH] fix(cli): make -y flag properly support non-interactive mode in create The -y flag was documented as 'Bypass prompts' but only bypassed the final 'Confirm create?' prompt. All other interactive prompts (preset selection, parameter input, template selection, workspace name) would still appear, breaking CI/CD and non-interactive usage. Changes: - Add isNonInteractive(inv) helper in create.go - Workspace name: error if not provided with -y - Template selection: auto-select if exactly 1 template exists, error if multiple - Preset selection: skip presets entirely (default to none) with -y - Parameters: use default values automatically, error if required param has no default - External auth: error immediately if required auth not authenticated - Update SkipPromptOption() description to accurately describe behavior - Regenerate golden files for updated flag description The -y flag now enables true non-interactive mode for `coder create`. --- cli/cliui/externalauth.go | 13 ++ cli/cliui/prompt.go | 7 +- cli/create.go | 149 +++++++++++------- cli/parameterresolver.go | 33 +++- cli/testdata/coder_autoupdate_--help.golden | 3 +- cli/testdata/coder_config-ssh_--help.golden | 3 +- cli/testdata/coder_create_--help.golden | 3 +- cli/testdata/coder_delete_--help.golden | 3 +- cli/testdata/coder_dotfiles_--help.golden | 3 +- cli/testdata/coder_logout_--help.golden | 3 +- .../coder_organizations_create_--help.golden | 3 +- ...r_organizations_roles_create_--help.golden | 3 +- ...r_organizations_roles_update_--help.golden | 3 +- cli/testdata/coder_publickey_--help.golden | 3 +- cli/testdata/coder_rename_--help.golden | 3 +- cli/testdata/coder_restart_--help.golden | 3 +- cli/testdata/coder_start_--help.golden | 3 +- cli/testdata/coder_stop_--help.golden | 3 +- .../coder_support_bundle_--help.golden | 3 +- cli/testdata/coder_task_delete_--help.golden | 3 +- .../coder_templates_archive_--help.golden | 3 +- .../coder_templates_create_--help.golden | 3 +- .../coder_templates_delete_--help.golden | 3 +- .../coder_templates_edit_--help.golden | 3 +- .../coder_templates_pull_--help.golden | 3 +- .../coder_templates_push_--help.golden | 3 +- ...r_templates_versions_archive_--help.golden | 3 +- ...templates_versions_unarchive_--help.golden | 3 +- .../coder_users_edit-roles_--help.golden | 3 +- docs/reference/cli/autoupdate.md | 2 +- docs/reference/cli/config-ssh.md | 2 +- docs/reference/cli/create.md | 2 +- docs/reference/cli/delete.md | 2 +- docs/reference/cli/dotfiles.md | 2 +- .../cli/external-workspaces_create.md | 2 +- docs/reference/cli/logout.md | 2 +- docs/reference/cli/organizations_create.md | 2 +- .../cli/organizations_roles_create.md | 2 +- .../cli/organizations_roles_update.md | 2 +- docs/reference/cli/provisioner_keys_delete.md | 2 +- docs/reference/cli/publickey.md | 2 +- docs/reference/cli/rename.md | 2 +- docs/reference/cli/restart.md | 2 +- docs/reference/cli/server_dbcrypt_decrypt.md | 2 +- docs/reference/cli/server_dbcrypt_delete.md | 2 +- docs/reference/cli/server_dbcrypt_rotate.md | 2 +- docs/reference/cli/start.md | 2 +- docs/reference/cli/stop.md | 2 +- docs/reference/cli/support_bundle.md | 2 +- docs/reference/cli/task_delete.md | 2 +- docs/reference/cli/templates_archive.md | 2 +- docs/reference/cli/templates_create.md | 2 +- docs/reference/cli/templates_delete.md | 2 +- docs/reference/cli/templates_edit.md | 2 +- docs/reference/cli/templates_pull.md | 2 +- docs/reference/cli/templates_push.md | 2 +- .../cli/templates_versions_archive.md | 2 +- .../cli/templates_versions_unarchive.md | 2 +- docs/reference/cli/users_edit-roles.md | 2 +- ...r_external-workspaces_create_--help.golden | 3 +- ...oder_provisioner_keys_delete_--help.golden | 3 +- ...coder_server_dbcrypt_decrypt_--help.golden | 3 +- .../coder_server_dbcrypt_delete_--help.golden | 3 +- .../coder_server_dbcrypt_rotate_--help.golden | 3 +- 64 files changed, 233 insertions(+), 119 deletions(-) diff --git a/cli/cliui/externalauth.go b/cli/cliui/externalauth.go index b1dce47994db2..7a53b1ed2ebf8 100644 --- a/cli/cliui/externalauth.go +++ b/cli/cliui/externalauth.go @@ -7,6 +7,7 @@ import ( "time" "github.com/briandowns/spinner" + "golang.org/x/xerrors" "github.com/coder/coder/v2/codersdk" ) @@ -14,6 +15,10 @@ import ( type ExternalAuthOptions struct { Fetch func(context.Context) ([]codersdk.TemplateVersionExternalAuth, error) FetchInterval time.Duration + // NonInteractive, when true, will cause the function to fail immediately + // if required external authentication is not already complete, rather than + // waiting for the user to authenticate via browser. + NonInteractive bool } func ExternalAuth(ctx context.Context, writer io.Writer, opts ExternalAuthOptions) error { @@ -41,6 +46,14 @@ func ExternalAuth(ctx context.Context, writer io.Writer, opts ExternalAuthOption continue } + // In non-interactive mode, fail immediately if required auth is missing. + if opts.NonInteractive { + return xerrors.Errorf( + "external authentication with %q is required but not authenticated; "+ + "authenticate via browser first or ensure the template marks it as optional", + auth.DisplayName) + } + _, _ = fmt.Fprintf(writer, "You must authenticate with %s to create a workspace with this template. Visit:\n\n\t%s\n\n", auth.DisplayName, auth.AuthenticateURL) ticker.Reset(opts.FetchInterval) diff --git a/cli/cliui/prompt.go b/cli/cliui/prompt.go index 264ebf2939780..b70fa538fe084 100644 --- a/cli/cliui/prompt.go +++ b/cli/cliui/prompt.go @@ -31,13 +31,14 @@ type PromptOptions struct { const skipPromptFlag = "yes" -// SkipPromptOption adds a "--yes/-y" flag to the cmd that can be used to skip -// prompts. +// SkipPromptOption adds a "--yes/-y" flag to the cmd that can be used to run +// in non-interactive mode. When enabled, prompts are skipped, default values +// are used where available, and the command fails if required inputs are missing. func SkipPromptOption() serpent.Option { return serpent.Option{ Flag: skipPromptFlag, FlagShorthand: "y", - Description: "Bypass prompts.", + Description: "Run in non-interactive mode. Accepts default values and fails on required inputs.", // Discard Value: serpent.BoolOf(new(bool)), } diff --git a/cli/create.go b/cli/create.go index 225d05950e77c..f28a1701db05e 100644 --- a/cli/create.go +++ b/cli/create.go @@ -29,6 +29,17 @@ const PresetNone = "none" var ErrNoPresetFound = xerrors.New("no preset found") +// isNonInteractive checks if the command is running in non-interactive mode +// (i.e., the --yes/-y flag was provided). +func isNonInteractive(inv *serpent.Invocation) bool { + if inv.ParsedFlags().Lookup("yes") != nil { + if skip, _ := inv.ParsedFlags().GetBool("yes"); skip { + return true + } + } + return false +} + type CreateOptions struct { BeforeCreate func(ctx context.Context, client *codersdk.Client, template codersdk.Template, templateVersionID uuid.UUID) error AfterCreate func(ctx context.Context, inv *serpent.Invocation, client *codersdk.Client, workspace codersdk.Workspace) error @@ -75,6 +86,9 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command { } if workspaceName == "" { + if isNonInteractive(inv) { + return xerrors.New("workspace name is required in non-interactive mode; provide it as an argument") + } workspaceName, err = cliui.Prompt(inv, cliui.PromptOptions{ Text: "Specify a name for your workspace:", Validate: func(workspaceName string) error { @@ -122,62 +136,76 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command { var templateVersionID uuid.UUID switch { case templateName == "": - _, _ = fmt.Fprintln(inv.Stdout, pretty.Sprint(cliui.DefaultStyles.Wrap, "Select a template below to preview the provisioned infrastructure:")) - templates, err := client.Templates(inv.Context(), codersdk.TemplateFilter{}) if err != nil { return err } - slices.SortFunc(templates, func(a, b codersdk.Template) int { - return slice.Descending(a.ActiveUserCount, b.ActiveUserCount) - }) - - templateNames := make([]string, 0, len(templates)) - templateByName := make(map[string]codersdk.Template, len(templates)) + // In non-interactive mode, auto-select if only one template exists, + // otherwise require explicit --template flag. + if isNonInteractive(inv) { + if len(templates) == 0 { + return xerrors.New("no templates available") + } + if len(templates) > 1 { + return xerrors.New("multiple templates available; use the --template flag to specify which one") + } + // Only one template available - auto-select it + template = templates[0] + templateVersionID = template.ActiveVersionID + } else { + _, _ = fmt.Fprintln(inv.Stdout, pretty.Sprint(cliui.DefaultStyles.Wrap, "Select a template below to preview the provisioned infrastructure:")) + + slices.SortFunc(templates, func(a, b codersdk.Template) int { + return slice.Descending(a.ActiveUserCount, b.ActiveUserCount) + }) - // If more than 1 organization exists in the list of templates, - // then include the organization name in the select options. - uniqueOrganizations := make(map[uuid.UUID]bool) - for _, template := range templates { - uniqueOrganizations[template.OrganizationID] = true - } + templateNames := make([]string, 0, len(templates)) + templateByName := make(map[string]codersdk.Template, len(templates)) - for _, template := range templates { - templateName := template.Name - if len(uniqueOrganizations) > 1 { - templateName += cliui.Placeholder( - fmt.Sprintf( - " (%s)", - template.OrganizationName, - ), - ) + // If more than 1 organization exists in the list of templates, + // then include the organization name in the select options. + uniqueOrganizations := make(map[uuid.UUID]bool) + for _, tpl := range templates { + uniqueOrganizations[tpl.OrganizationID] = true } - if template.ActiveUserCount > 0 { - templateName += cliui.Placeholder( - fmt.Sprintf( - " used by %s", - formatActiveDevelopers(template.ActiveUserCount), - ), - ) + for _, tpl := range templates { + tplName := tpl.Name + if len(uniqueOrganizations) > 1 { + tplName += cliui.Placeholder( + fmt.Sprintf( + " (%s)", + tpl.OrganizationName, + ), + ) + } + + if tpl.ActiveUserCount > 0 { + tplName += cliui.Placeholder( + fmt.Sprintf( + " used by %s", + formatActiveDevelopers(tpl.ActiveUserCount), + ), + ) + } + + templateNames = append(templateNames, tplName) + templateByName[tplName] = tpl } - templateNames = append(templateNames, templateName) - templateByName[templateName] = template - } + // Move the cursor up a single line for nicer display! + option, err := cliui.Select(inv, cliui.SelectOptions{ + Options: templateNames, + HideSearch: true, + }) + if err != nil { + return err + } - // Move the cursor up a single line for nicer display! - option, err := cliui.Select(inv, cliui.SelectOptions{ - Options: templateNames, - HideSearch: true, - }) - if err != nil { - return err + template = templateByName[option] + templateVersionID = template.ActiveVersionID } - - template = templateByName[option] - templateVersionID = template.ActiveVersionID case sourceWorkspace.LatestBuild.TemplateVersionID != uuid.Nil: template, err = client.Template(inv.Context(), sourceWorkspace.TemplateID) if err != nil { @@ -297,19 +325,28 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command { if !errors.Is(err, ErrNoPresetFound) { return xerrors.Errorf("unable to resolve preset: %w", err) } - // If no preset found, prompt the user to choose a preset - if preset, err = promptPresetSelection(inv, tvPresets); err != nil { - return xerrors.Errorf("unable to prompt user for preset: %w", err) + // No preset found - in non-interactive mode, skip presets instead of prompting + if isNonInteractive(inv) { + // Leave preset as nil, effectively skipping presets + preset = nil + } else { + // Interactive mode - prompt the user to choose a preset + if preset, err = promptPresetSelection(inv, tvPresets); err != nil { + return xerrors.Errorf("unable to prompt user for preset: %w", err) + } } } - // Convert preset parameters into workspace build parameters - presetParameters = presetParameterAsWorkspaceBuildParameters(preset.Parameters) - // Inform the user which preset was applied and its parameters - displayAppliedPreset(inv, preset, presetParameters) - } else { + // Convert preset parameters into workspace build parameters (if a preset was selected) + if preset != nil { + presetParameters = presetParameterAsWorkspaceBuildParameters(preset.Parameters) + // Inform the user which preset was applied and its parameters + displayAppliedPreset(inv, preset, presetParameters) + } + } + if preset == nil { // Inform the user that no preset was applied - _, _ = fmt.Fprintf(inv.Stdout, "%s", cliui.Bold("No preset applied.")) + _, _ = fmt.Fprintf(inv.Stdout, "%s\n", cliui.Bold("No preset applied.")) } if opts.BeforeCreate != nil { @@ -330,6 +367,8 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command { RichParameterDefaults: cliBuildParameterDefaults, SourceWorkspaceParameters: sourceWorkspaceParameters, + + NonInteractive: isNonInteractive(inv), }) if err != nil { return xerrors.Errorf("prepare build: %w", err) @@ -460,6 +499,8 @@ type prepWorkspaceBuildArgs struct { RichParameters []codersdk.WorkspaceBuildParameter RichParameterFile string RichParameterDefaults []codersdk.WorkspaceBuildParameter + + NonInteractive bool } // resolvePreset returns the preset matching the given presetName (if specified), @@ -562,7 +603,8 @@ func prepWorkspaceBuild(inv *serpent.Invocation, client *codersdk.Client, args p WithPromptRichParameters(args.PromptRichParameters). WithRichParameters(args.RichParameters). WithRichParametersFile(parameterFile). - WithRichParametersDefaults(args.RichParameterDefaults) + WithRichParametersDefaults(args.RichParameterDefaults). + WithNonInteractive(args.NonInteractive) buildParameters, err := resolver.Resolve(inv, args.Action, templateVersionParameters) if err != nil { return nil, err @@ -572,6 +614,7 @@ func prepWorkspaceBuild(inv *serpent.Invocation, client *codersdk.Client, args p Fetch: func(ctx context.Context) ([]codersdk.TemplateVersionExternalAuth, error) { return client.TemplateVersionExternalAuth(ctx, templateVersion.ID) }, + NonInteractive: args.NonInteractive, }) if err != nil { return nil, xerrors.Errorf("template version git auth: %w", err) diff --git a/cli/parameterresolver.go b/cli/parameterresolver.go index cbd00fb59623e..97f50a3be1f41 100644 --- a/cli/parameterresolver.go +++ b/cli/parameterresolver.go @@ -34,6 +34,7 @@ type ParameterResolver struct { promptRichParameters bool promptEphemeralParameters bool + nonInteractive bool } func (pr *ParameterResolver) WithLastBuildParameters(params []codersdk.WorkspaceBuildParameter) *ParameterResolver { @@ -86,6 +87,11 @@ func (pr *ParameterResolver) WithPromptEphemeralParameters(promptEphemeralParame return pr } +func (pr *ParameterResolver) WithNonInteractive(nonInteractive bool) *ParameterResolver { + pr.nonInteractive = nonInteractive + return pr +} + // Resolve gathers workspace build parameters in a layered fashion, applying values from various sources // in order of precedence: parameter file < CLI/ENV < source build < last build < preset < user input. func (pr *ParameterResolver) Resolve(inv *serpent.Invocation, action WorkspaceCLIAction, templateVersionParameters []codersdk.TemplateVersionParameter) ([]codersdk.WorkspaceBuildParameter, error) { @@ -250,18 +256,39 @@ func (pr *ParameterResolver) resolveWithInput(resolved []codersdk.WorkspaceBuild if p != nil { continue } - // PreviewParameter has not been resolved yet, so CLI needs to determine if user should input it. + // Parameter has not been resolved yet, so CLI needs to determine if user should input it. firstTimeUse := pr.isFirstTimeUse(tvp.Name) promptParameterOption := pr.isLastBuildParameterInvalidOption(tvp) - if (tvp.Ephemeral && pr.promptEphemeralParameters) || + needsInput := (tvp.Ephemeral && pr.promptEphemeralParameters) || (action == WorkspaceCreate && tvp.Required) || (action == WorkspaceCreate && !tvp.Ephemeral) || (action == WorkspaceUpdate && promptParameterOption) || (action == WorkspaceUpdate && tvp.Mutable && tvp.Required) || (action == WorkspaceUpdate && !tvp.Mutable && firstTimeUse) || - (tvp.Mutable && !tvp.Ephemeral && pr.promptRichParameters) { + (tvp.Mutable && !tvp.Ephemeral && pr.promptRichParameters) + + if needsInput { + // In non-interactive mode, use default values or fail if required without default. + if pr.nonInteractive { + if tvp.DefaultValue != "" { + // Use default value + resolved = append(resolved, codersdk.WorkspaceBuildParameter{ + Name: tvp.Name, + Value: tvp.DefaultValue, + }) + } else if tvp.Required { + // Required parameter with no default - fail + return nil, xerrors.Errorf( + "parameter %q is required but has no default value; provide it with --parameter %s=", + tvp.Name, tvp.Name) + } + // Optional parameter with no default - skip (will use empty/server default) + continue + } + + // Interactive mode - prompt user for input parameterValue, err := cliui.RichParameter(inv, tvp, pr.richParametersDefaults) if err != nil { return nil, err diff --git a/cli/testdata/coder_autoupdate_--help.golden b/cli/testdata/coder_autoupdate_--help.golden index 96207daba5b24..f4596e5b5287f 100644 --- a/cli/testdata/coder_autoupdate_--help.golden +++ b/cli/testdata/coder_autoupdate_--help.golden @@ -7,7 +7,8 @@ USAGE: OPTIONS: -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_config-ssh_--help.golden b/cli/testdata/coder_config-ssh_--help.golden index e2b03164d9513..27b2e2ffa1f13 100644 --- a/cli/testdata/coder_config-ssh_--help.golden +++ b/cli/testdata/coder_config-ssh_--help.golden @@ -55,7 +55,8 @@ OPTIONS: configured in the workspace template is used. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_create_--help.golden b/cli/testdata/coder_create_--help.golden index 47e809e8f5af6..14b689abbd9ca 100644 --- a/cli/testdata/coder_create_--help.golden +++ b/cli/testdata/coder_create_--help.golden @@ -50,7 +50,8 @@ OPTIONS: Specify a template version name. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_delete_--help.golden b/cli/testdata/coder_delete_--help.golden index f9dfc9b9b93df..20a7d038c62e3 100644 --- a/cli/testdata/coder_delete_--help.golden +++ b/cli/testdata/coder_delete_--help.golden @@ -18,7 +18,8 @@ OPTIONS: resources. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_dotfiles_--help.golden b/cli/testdata/coder_dotfiles_--help.golden index 14991512127da..dbb57d3ff3ebf 100644 --- a/cli/testdata/coder_dotfiles_--help.golden +++ b/cli/testdata/coder_dotfiles_--help.golden @@ -24,7 +24,8 @@ OPTIONS: empty, will use $HOME. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_logout_--help.golden b/cli/testdata/coder_logout_--help.golden index 8ec08c2ad7553..27813df0cc575 100644 --- a/cli/testdata/coder_logout_--help.golden +++ b/cli/testdata/coder_logout_--help.golden @@ -7,7 +7,8 @@ USAGE: OPTIONS: -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_organizations_create_--help.golden b/cli/testdata/coder_organizations_create_--help.golden index 729ef373db0a1..8cc071eab8e83 100644 --- a/cli/testdata/coder_organizations_create_--help.golden +++ b/cli/testdata/coder_organizations_create_--help.golden @@ -7,7 +7,8 @@ USAGE: OPTIONS: -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_organizations_roles_create_--help.golden b/cli/testdata/coder_organizations_roles_create_--help.golden index 8bac1a3c788dc..767a4815bc751 100644 --- a/cli/testdata/coder_organizations_roles_create_--help.golden +++ b/cli/testdata/coder_organizations_roles_create_--help.golden @@ -18,7 +18,8 @@ OPTIONS: Reads stdin for the json role definition to upload. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_organizations_roles_update_--help.golden b/cli/testdata/coder_organizations_roles_update_--help.golden index f0c28bd03d078..acdf3d3b8da90 100644 --- a/cli/testdata/coder_organizations_roles_update_--help.golden +++ b/cli/testdata/coder_organizations_roles_update_--help.golden @@ -23,7 +23,8 @@ OPTIONS: Reads stdin for the json role definition to upload. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_publickey_--help.golden b/cli/testdata/coder_publickey_--help.golden index 7346f892836b0..46ecc6a0fed05 100644 --- a/cli/testdata/coder_publickey_--help.golden +++ b/cli/testdata/coder_publickey_--help.golden @@ -13,7 +13,8 @@ OPTIONS: services it's registered with. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_rename_--help.golden b/cli/testdata/coder_rename_--help.golden index 33f9c460006a2..b96bb72b5d758 100644 --- a/cli/testdata/coder_rename_--help.golden +++ b/cli/testdata/coder_rename_--help.golden @@ -7,7 +7,8 @@ USAGE: OPTIONS: -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_restart_--help.golden b/cli/testdata/coder_restart_--help.golden index 6208b733457ab..5d7b703b12177 100644 --- a/cli/testdata/coder_restart_--help.golden +++ b/cli/testdata/coder_restart_--help.golden @@ -39,7 +39,8 @@ OPTIONS: pairs for the parameters. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_start_--help.golden b/cli/testdata/coder_start_--help.golden index ce1134626c486..7e6948f81caa4 100644 --- a/cli/testdata/coder_start_--help.golden +++ b/cli/testdata/coder_start_--help.golden @@ -42,7 +42,8 @@ OPTIONS: pairs for the parameters. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_stop_--help.golden b/cli/testdata/coder_stop_--help.golden index 529c38484668e..fea2b1b74daa5 100644 --- a/cli/testdata/coder_stop_--help.golden +++ b/cli/testdata/coder_stop_--help.golden @@ -7,7 +7,8 @@ USAGE: OPTIONS: -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_support_bundle_--help.golden b/cli/testdata/coder_support_bundle_--help.golden index 7b0a5bb18f2a1..8e31aafb9f25e 100644 --- a/cli/testdata/coder_support_bundle_--help.golden +++ b/cli/testdata/coder_support_bundle_--help.golden @@ -19,7 +19,8 @@ OPTIONS: example, if you need to troubleshoot a specific Coder replica. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_task_delete_--help.golden b/cli/testdata/coder_task_delete_--help.golden index b0169410a9293..72e577aa3d4de 100644 --- a/cli/testdata/coder_task_delete_--help.golden +++ b/cli/testdata/coder_task_delete_--help.golden @@ -21,7 +21,8 @@ USAGE: OPTIONS: -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_archive_--help.golden b/cli/testdata/coder_templates_archive_--help.golden index ebad38db93341..35afca8031879 100644 --- a/cli/testdata/coder_templates_archive_--help.golden +++ b/cli/testdata/coder_templates_archive_--help.golden @@ -14,7 +14,8 @@ OPTIONS: versions are archived. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_create_--help.golden b/cli/testdata/coder_templates_create_--help.golden index 80cccb24a57e3..6f8f834bd9dae 100644 --- a/cli/testdata/coder_templates_create_--help.golden +++ b/cli/testdata/coder_templates_create_--help.golden @@ -68,7 +68,8 @@ OPTIONS: Specify a file path with values for Terraform-managed variables. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_delete_--help.golden b/cli/testdata/coder_templates_delete_--help.golden index 4d15b7f34382b..2094d8f8d54b7 100644 --- a/cli/testdata/coder_templates_delete_--help.golden +++ b/cli/testdata/coder_templates_delete_--help.golden @@ -12,7 +12,8 @@ OPTIONS: Select which organization (uuid or name) to use. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_edit_--help.golden b/cli/testdata/coder_templates_edit_--help.golden index 76dee16cf993c..a5fe3fd684206 100644 --- a/cli/testdata/coder_templates_edit_--help.golden +++ b/cli/testdata/coder_templates_edit_--help.golden @@ -91,7 +91,8 @@ OPTIONS: for more details. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_pull_--help.golden b/cli/testdata/coder_templates_pull_--help.golden index 3a04c351f1f86..c011b3a6cb390 100644 --- a/cli/testdata/coder_templates_pull_--help.golden +++ b/cli/testdata/coder_templates_pull_--help.golden @@ -18,7 +18,8 @@ OPTIONS: the template version to pull. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. --zip bool Output the template as a zip archive to stdout. diff --git a/cli/testdata/coder_templates_push_--help.golden b/cli/testdata/coder_templates_push_--help.golden index edab61a3c55f1..8d7fdf8aceb86 100644 --- a/cli/testdata/coder_templates_push_--help.golden +++ b/cli/testdata/coder_templates_push_--help.golden @@ -48,7 +48,8 @@ OPTIONS: Specify a file path with values for Terraform-managed variables. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_versions_archive_--help.golden b/cli/testdata/coder_templates_versions_archive_--help.golden index eae5a22ff37d6..87c4efc865b7f 100644 --- a/cli/testdata/coder_templates_versions_archive_--help.golden +++ b/cli/testdata/coder_templates_versions_archive_--help.golden @@ -11,7 +11,8 @@ OPTIONS: Select which organization (uuid or name) to use. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_templates_versions_unarchive_--help.golden b/cli/testdata/coder_templates_versions_unarchive_--help.golden index 6a641929fa20d..12ac9e197ceee 100644 --- a/cli/testdata/coder_templates_versions_unarchive_--help.golden +++ b/cli/testdata/coder_templates_versions_unarchive_--help.golden @@ -11,7 +11,8 @@ OPTIONS: Select which organization (uuid or name) to use. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/cli/testdata/coder_users_edit-roles_--help.golden b/cli/testdata/coder_users_edit-roles_--help.golden index 5a21c152e63fc..aa86d7ba94ac7 100644 --- a/cli/testdata/coder_users_edit-roles_--help.golden +++ b/cli/testdata/coder_users_edit-roles_--help.golden @@ -11,7 +11,8 @@ OPTIONS: the user may have. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/docs/reference/cli/autoupdate.md b/docs/reference/cli/autoupdate.md index a025616e76031..645f3c64ded70 100644 --- a/docs/reference/cli/autoupdate.md +++ b/docs/reference/cli/autoupdate.md @@ -17,4 +17,4 @@ coder autoupdate [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/config-ssh.md b/docs/reference/cli/config-ssh.md index 607aa86849dd2..6f140aed15a30 100644 --- a/docs/reference/cli/config-ssh.md +++ b/docs/reference/cli/config-ssh.md @@ -114,4 +114,4 @@ Disable starting the workspace automatically when connecting via SSH. |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/create.md b/docs/reference/cli/create.md index d18b4ea5c8e05..578e1c46e591b 100644 --- a/docs/reference/cli/create.md +++ b/docs/reference/cli/create.md @@ -89,7 +89,7 @@ Specify the source workspace name to copy parameters from. |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --parameter diff --git a/docs/reference/cli/delete.md b/docs/reference/cli/delete.md index 9dc2ea6fa9a19..b24330097edb8 100644 --- a/docs/reference/cli/delete.md +++ b/docs/reference/cli/delete.md @@ -37,4 +37,4 @@ Delete a workspace without deleting its resources. This can delete a workspace i |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/dotfiles.md b/docs/reference/cli/dotfiles.md index 57074497fee5f..1014e37db8d4b 100644 --- a/docs/reference/cli/dotfiles.md +++ b/docs/reference/cli/dotfiles.md @@ -52,4 +52,4 @@ Specifies the directory for the dotfiles repository, relative to global config d |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/external-workspaces_create.md b/docs/reference/cli/external-workspaces_create.md index b0744387a1d70..e7b8e1ee99067 100644 --- a/docs/reference/cli/external-workspaces_create.md +++ b/docs/reference/cli/external-workspaces_create.md @@ -89,7 +89,7 @@ Specify the source workspace name to copy parameters from. |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --parameter diff --git a/docs/reference/cli/logout.md b/docs/reference/cli/logout.md index b35369ee36448..0f79fe2510a26 100644 --- a/docs/reference/cli/logout.md +++ b/docs/reference/cli/logout.md @@ -17,4 +17,4 @@ coder logout [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/organizations_create.md b/docs/reference/cli/organizations_create.md index 14f40f55e00d1..1b37e86664269 100644 --- a/docs/reference/cli/organizations_create.md +++ b/docs/reference/cli/organizations_create.md @@ -17,4 +17,4 @@ coder organizations create [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/organizations_roles_create.md b/docs/reference/cli/organizations_roles_create.md index 70b2f21c4df2c..52a1e2d2050a6 100644 --- a/docs/reference/cli/organizations_roles_create.md +++ b/docs/reference/cli/organizations_roles_create.md @@ -25,7 +25,7 @@ coder organizations roles create [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --dry-run diff --git a/docs/reference/cli/organizations_roles_update.md b/docs/reference/cli/organizations_roles_update.md index 7179617f76bea..be0056f8cb369 100644 --- a/docs/reference/cli/organizations_roles_update.md +++ b/docs/reference/cli/organizations_roles_update.md @@ -25,7 +25,7 @@ coder organizations roles update [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --dry-run diff --git a/docs/reference/cli/provisioner_keys_delete.md b/docs/reference/cli/provisioner_keys_delete.md index 4303491106716..89b2772ee462a 100644 --- a/docs/reference/cli/provisioner_keys_delete.md +++ b/docs/reference/cli/provisioner_keys_delete.md @@ -21,7 +21,7 @@ coder provisioner keys delete [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/publickey.md b/docs/reference/cli/publickey.md index ec68d813b137b..69db507b0d36a 100644 --- a/docs/reference/cli/publickey.md +++ b/docs/reference/cli/publickey.md @@ -29,4 +29,4 @@ Regenerate your public key. This will require updating the key on any services i |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/rename.md b/docs/reference/cli/rename.md index 511ccc60f8d3b..f0c60cacd71f9 100644 --- a/docs/reference/cli/rename.md +++ b/docs/reference/cli/rename.md @@ -17,4 +17,4 @@ coder rename [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/restart.md b/docs/reference/cli/restart.md index 1c30e3e1fffaa..7e03b810da7e6 100644 --- a/docs/reference/cli/restart.md +++ b/docs/reference/cli/restart.md @@ -17,7 +17,7 @@ coder restart [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --build-option diff --git a/docs/reference/cli/server_dbcrypt_decrypt.md b/docs/reference/cli/server_dbcrypt_decrypt.md index 5126ef0fccb25..ef8fce8f3c6c6 100644 --- a/docs/reference/cli/server_dbcrypt_decrypt.md +++ b/docs/reference/cli/server_dbcrypt_decrypt.md @@ -45,4 +45,4 @@ Keys required to decrypt existing data. Must be a comma-separated list of base64 |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/server_dbcrypt_delete.md b/docs/reference/cli/server_dbcrypt_delete.md index a5e7d16715ecf..99ec41c883b4d 100644 --- a/docs/reference/cli/server_dbcrypt_delete.md +++ b/docs/reference/cli/server_dbcrypt_delete.md @@ -40,4 +40,4 @@ Type of auth to use when connecting to postgres. |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/server_dbcrypt_rotate.md b/docs/reference/cli/server_dbcrypt_rotate.md index 322a909a087b8..db6cabce91d2b 100644 --- a/docs/reference/cli/server_dbcrypt_rotate.md +++ b/docs/reference/cli/server_dbcrypt_rotate.md @@ -54,4 +54,4 @@ The old external token encryption keys. Must be a comma-separated list of base64 |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/start.md b/docs/reference/cli/start.md index 9f0f30cdfa8c2..03b6382615505 100644 --- a/docs/reference/cli/start.md +++ b/docs/reference/cli/start.md @@ -25,7 +25,7 @@ Return immediately after starting the workspace. |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --build-option diff --git a/docs/reference/cli/stop.md b/docs/reference/cli/stop.md index dba81c5cf7e92..146342e462ad8 100644 --- a/docs/reference/cli/stop.md +++ b/docs/reference/cli/stop.md @@ -17,4 +17,4 @@ coder stop [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/support_bundle.md b/docs/reference/cli/support_bundle.md index 59b1fa4130deb..a35b3dcf8c2d2 100644 --- a/docs/reference/cli/support_bundle.md +++ b/docs/reference/cli/support_bundle.md @@ -23,7 +23,7 @@ This command generates a file containing detailed troubleshooting information ab |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --output-file diff --git a/docs/reference/cli/task_delete.md b/docs/reference/cli/task_delete.md index 0181ee0ceafd7..40e983c6e3b3c 100644 --- a/docs/reference/cli/task_delete.md +++ b/docs/reference/cli/task_delete.md @@ -37,4 +37,4 @@ coder task delete [flags] [ ...] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. diff --git a/docs/reference/cli/templates_archive.md b/docs/reference/cli/templates_archive.md index ef09707e5f323..c23d29c8d1096 100644 --- a/docs/reference/cli/templates_archive.md +++ b/docs/reference/cli/templates_archive.md @@ -17,7 +17,7 @@ coder templates archive [flags] [template-name...] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --all diff --git a/docs/reference/cli/templates_create.md b/docs/reference/cli/templates_create.md index cd3754e383ad5..c4814bcd9cdf1 100644 --- a/docs/reference/cli/templates_create.md +++ b/docs/reference/cli/templates_create.md @@ -102,7 +102,7 @@ Requires workspace builds to use the active template version. This setting does |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/templates_delete.md b/docs/reference/cli/templates_delete.md index 9037a39d2b378..1c57b916aa568 100644 --- a/docs/reference/cli/templates_delete.md +++ b/docs/reference/cli/templates_delete.md @@ -21,7 +21,7 @@ coder templates delete [flags] [name...] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/templates_edit.md b/docs/reference/cli/templates_edit.md index 5d9f6f0a55a0d..0aa4cafab198c 100644 --- a/docs/reference/cli/templates_edit.md +++ b/docs/reference/cli/templates_edit.md @@ -169,7 +169,7 @@ Disable the default behavior of granting template access to the 'everyone' group |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/templates_pull.md b/docs/reference/cli/templates_pull.md index 529b110248475..10cda30c804ca 100644 --- a/docs/reference/cli/templates_pull.md +++ b/docs/reference/cli/templates_pull.md @@ -41,7 +41,7 @@ The name of the template version to pull. Use 'active' to pull the active versio |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/templates_push.md b/docs/reference/cli/templates_push.md index 8c7901e86e408..9fa429f87d6a3 100644 --- a/docs/reference/cli/templates_push.md +++ b/docs/reference/cli/templates_push.md @@ -74,7 +74,7 @@ Whether the new template will be marked active. |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -d, --directory diff --git a/docs/reference/cli/templates_versions_archive.md b/docs/reference/cli/templates_versions_archive.md index 1c7f4fd7d82c5..a665bb3cf5693 100644 --- a/docs/reference/cli/templates_versions_archive.md +++ b/docs/reference/cli/templates_versions_archive.md @@ -17,7 +17,7 @@ coder templates versions archive [flags] [template-version-names |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/templates_versions_unarchive.md b/docs/reference/cli/templates_versions_unarchive.md index c5351939bcf39..0880314dd2dc0 100644 --- a/docs/reference/cli/templates_versions_unarchive.md +++ b/docs/reference/cli/templates_versions_unarchive.md @@ -17,7 +17,7 @@ coder templates versions unarchive [flags] [template-version-nam |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### -O, --org diff --git a/docs/reference/cli/users_edit-roles.md b/docs/reference/cli/users_edit-roles.md index 04f12ce701584..b774dbb0279d6 100644 --- a/docs/reference/cli/users_edit-roles.md +++ b/docs/reference/cli/users_edit-roles.md @@ -17,7 +17,7 @@ coder users edit-roles [flags] |------|-------------------| | Type | bool | -Bypass prompts. +Run in non-interactive mode. Accepts default values and fails on required inputs. ### --roles diff --git a/enterprise/cli/testdata/coder_external-workspaces_create_--help.golden b/enterprise/cli/testdata/coder_external-workspaces_create_--help.golden index 208d2cc2296d7..07f2c5802c1d4 100644 --- a/enterprise/cli/testdata/coder_external-workspaces_create_--help.golden +++ b/enterprise/cli/testdata/coder_external-workspaces_create_--help.golden @@ -50,7 +50,8 @@ OPTIONS: Specify a template version name. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden b/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden index a8aea08c75187..9a07056e9a763 100644 --- a/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden +++ b/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden @@ -12,7 +12,8 @@ OPTIONS: Select which organization (uuid or name) to use. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_server_dbcrypt_decrypt_--help.golden b/enterprise/cli/testdata/coder_server_dbcrypt_decrypt_--help.golden index 8f621ab10a63c..322b6de091e1b 100644 --- a/enterprise/cli/testdata/coder_server_dbcrypt_decrypt_--help.golden +++ b/enterprise/cli/testdata/coder_server_dbcrypt_decrypt_--help.golden @@ -17,7 +17,8 @@ OPTIONS: The connection URL for the Postgres database. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_server_dbcrypt_delete_--help.golden b/enterprise/cli/testdata/coder_server_dbcrypt_delete_--help.golden index 8d3eda851dfe1..3b6aee3067180 100644 --- a/enterprise/cli/testdata/coder_server_dbcrypt_delete_--help.golden +++ b/enterprise/cli/testdata/coder_server_dbcrypt_delete_--help.golden @@ -15,7 +15,8 @@ OPTIONS: The connection URL for the Postgres database. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_server_dbcrypt_rotate_--help.golden b/enterprise/cli/testdata/coder_server_dbcrypt_rotate_--help.golden index 5961ecebde539..5f565251bd620 100644 --- a/enterprise/cli/testdata/coder_server_dbcrypt_rotate_--help.golden +++ b/enterprise/cli/testdata/coder_server_dbcrypt_rotate_--help.golden @@ -20,7 +20,8 @@ OPTIONS: The connection URL for the Postgres database. -y, --yes bool - Bypass prompts. + Run in non-interactive mode. Accepts default values and fails on + required inputs. ——— Run `coder --help` for a list of global options.