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:
Marcin Tojek
2023-03-07 16:38:31 +01:00
committed by GitHub
parent f19076cf06
commit 2d4706ac33
30 changed files with 651 additions and 409 deletions

View File

@ -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 {