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.