mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
feat: mark coder_parameter as "required" (#6433)
* Add required column * Pass through providerd * Pass the required property down * Optional * Fix * Fix * Fix * fix * CLI create: support for optional fields * Use HTML API to mark fields required * Fix * Improve validation * more fixes * make fmt * Fix * WIP * Fix: test * CLI update tets * OptionalParameterAdded * Fix: migration
This commit is contained in:
@ -11,26 +11,38 @@ func ValidateNewWorkspaceParameters(richParameters []TemplateVersionParameter, b
|
||||
}
|
||||
|
||||
func ValidateWorkspaceBuildParameters(richParameters []TemplateVersionParameter, buildParameters, lastBuildParameters []WorkspaceBuildParameter) error {
|
||||
for _, buildParameter := range buildParameters {
|
||||
if buildParameter.Name == "" {
|
||||
return xerrors.Errorf(`workspace build parameter name is missing`)
|
||||
}
|
||||
richParameter, found := findTemplateVersionParameter(richParameters, buildParameter.Name)
|
||||
if !found {
|
||||
return xerrors.Errorf(`workspace build parameter is not defined in the template ("coder_parameter"): %s`, buildParameter.Name)
|
||||
for _, richParameter := range richParameters {
|
||||
buildParameter, foundBuildParameter := findBuildParameter(buildParameters, richParameter.Name)
|
||||
lastBuildParameter, foundLastBuildParameter := findBuildParameter(lastBuildParameters, richParameter.Name)
|
||||
|
||||
if richParameter.Required && !foundBuildParameter && !foundLastBuildParameter {
|
||||
return xerrors.Errorf("workspace build parameter %q is required", richParameter.Name)
|
||||
}
|
||||
|
||||
err := ValidateWorkspaceBuildParameter(*richParameter, buildParameter, findLastBuildParameter(lastBuildParameters, buildParameter.Name))
|
||||
if !foundBuildParameter && foundLastBuildParameter {
|
||||
continue // previous build parameters have been validated before the last build
|
||||
}
|
||||
|
||||
err := ValidateWorkspaceBuildParameter(richParameter, buildParameter, lastBuildParameter)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("can't validate build parameter %q: %w", buildParameter.Name, err)
|
||||
return xerrors.Errorf("can't validate build parameter %q: %w", richParameter.Name, err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, buildParameter WorkspaceBuildParameter, lastBuildParameter *WorkspaceBuildParameter) error {
|
||||
value := buildParameter.Value
|
||||
if value == "" {
|
||||
func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, buildParameter *WorkspaceBuildParameter, lastBuildParameter *WorkspaceBuildParameter) error {
|
||||
var value string
|
||||
|
||||
if buildParameter != nil {
|
||||
value = buildParameter.Value
|
||||
}
|
||||
|
||||
if richParameter.Required && value == "" {
|
||||
return xerrors.Errorf("parameter value is required")
|
||||
}
|
||||
|
||||
if value == "" { // parameter is optional, so take the default value
|
||||
value = richParameter.DefaultValue
|
||||
}
|
||||
|
||||
@ -76,7 +88,11 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
|
||||
return validation.Valid(richParameter.Type, value)
|
||||
}
|
||||
|
||||
func findTemplateVersionParameter(params []TemplateVersionParameter, parameterName string) (*TemplateVersionParameter, bool) {
|
||||
func findBuildParameter(params []WorkspaceBuildParameter, parameterName string) (*WorkspaceBuildParameter, bool) {
|
||||
if params == nil {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
for _, p := range params {
|
||||
if p.Name == parameterName {
|
||||
return &p, true
|
||||
@ -85,15 +101,6 @@ func findTemplateVersionParameter(params []TemplateVersionParameter, parameterNa
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func findLastBuildParameter(params []WorkspaceBuildParameter, parameterName string) *WorkspaceBuildParameter {
|
||||
for _, p := range params {
|
||||
if p.Name == parameterName {
|
||||
return &p
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func parameterValuesAsArray(options []TemplateVersionParameterOption) []string {
|
||||
var arr []string
|
||||
for _, opt := range options {
|
||||
|
Reference in New Issue
Block a user