Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5282122

Browse files
committed
Improve validation
1 parent 2c8be6c commit 5282122

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

codersdk/richparameters.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@ func ValidateNewWorkspaceParameters(richParameters []TemplateVersionParameter, b
1111
}
1212

1313
func ValidateWorkspaceBuildParameters(richParameters []TemplateVersionParameter, buildParameters, lastBuildParameters []WorkspaceBuildParameter) error {
14-
for _, buildParameter := range buildParameters {
15-
if buildParameter.Name == "" {
16-
return xerrors.Errorf(`workspace build parameter name is missing`)
14+
for _, richParameter := range richParameters {
15+
buildParameter, foundBuildParameter := findBuildParameter(buildParameters, richParameter.Name)
16+
lastBuildParameter, foundLastBuildParameter := findBuildParameter(lastBuildParameters, richParameter.Name)
17+
18+
if richParameter.Required && !foundBuildParameter && !foundLastBuildParameter {
19+
return xerrors.Errorf("workspace build parameter %q is required", buildParameter.Name)
1720
}
18-
richParameter, found := findTemplateVersionParameter(richParameters, buildParameter.Name)
19-
if !found {
20-
return xerrors.Errorf(`workspace build parameter is not defined in the template ("coder_parameter"): %s`, buildParameter.Name)
21+
22+
if !foundBuildParameter && foundLastBuildParameter {
23+
continue // previous build parameters have been validated before the last build
2124
}
2225

23-
err := ValidateWorkspaceBuildParameter(*richParameter, buildParameter, findLastBuildParameter(lastBuildParameters, buildParameter.Name))
26+
err := ValidateWorkspaceBuildParameter(richParameter, *buildParameter, lastBuildParameter)
2427
if err != nil {
2528
return xerrors.Errorf("can't validate build parameter %q: %w", buildParameter.Name, err)
2629
}
@@ -30,11 +33,10 @@ func ValidateWorkspaceBuildParameters(richParameters []TemplateVersionParameter,
3033

3134
func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, buildParameter WorkspaceBuildParameter, lastBuildParameter *WorkspaceBuildParameter) error {
3235
value := buildParameter.Value
33-
if value == "" && richParameter.Required {
36+
if richParameter.Required && value == "" {
3437
return xerrors.Errorf("parameter value is required")
3538
}
36-
37-
if value == "" { // parameter is optional
39+
if value == "" { // parameter is optional, so take the default value
3840
value = richParameter.DefaultValue
3941
}
4042

@@ -89,13 +91,13 @@ func findTemplateVersionParameter(params []TemplateVersionParameter, parameterNa
8991
return nil, false
9092
}
9193

92-
func findLastBuildParameter(params []WorkspaceBuildParameter, parameterName string) *WorkspaceBuildParameter {
94+
func findBuildParameter(params []WorkspaceBuildParameter, parameterName string) (*WorkspaceBuildParameter, bool) {
9395
for _, p := range params {
9496
if p.Name == parameterName {
95-
return &p
97+
return &p, true
9698
}
9799
}
98-
return nil
100+
return nil, false
99101
}
100102

101103
func parameterValuesAsArray(options []TemplateVersionParameterOption) []string {

0 commit comments

Comments
 (0)