@@ -11,16 +11,19 @@ func ValidateNewWorkspaceParameters(richParameters []TemplateVersionParameter, b
11
11
}
12
12
13
13
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 )
17
20
}
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
21
24
}
22
25
23
- err := ValidateWorkspaceBuildParameter (* richParameter , buildParameter , findLastBuildParameter ( lastBuildParameters , buildParameter . Name ) )
26
+ err := ValidateWorkspaceBuildParameter (richParameter , * buildParameter , lastBuildParameter )
24
27
if err != nil {
25
28
return xerrors .Errorf ("can't validate build parameter %q: %w" , buildParameter .Name , err )
26
29
}
@@ -30,11 +33,10 @@ func ValidateWorkspaceBuildParameters(richParameters []TemplateVersionParameter,
30
33
31
34
func ValidateWorkspaceBuildParameter (richParameter TemplateVersionParameter , buildParameter WorkspaceBuildParameter , lastBuildParameter * WorkspaceBuildParameter ) error {
32
35
value := buildParameter .Value
33
- if value == "" && richParameter . Required {
36
+ if richParameter . Required && value == "" {
34
37
return xerrors .Errorf ("parameter value is required" )
35
38
}
36
-
37
- if value == "" { // parameter is optional
39
+ if value == "" { // parameter is optional, so take the default value
38
40
value = richParameter .DefaultValue
39
41
}
40
42
@@ -89,13 +91,13 @@ func findTemplateVersionParameter(params []TemplateVersionParameter, parameterNa
89
91
return nil , false
90
92
}
91
93
92
- func findLastBuildParameter (params []WorkspaceBuildParameter , parameterName string ) * WorkspaceBuildParameter {
94
+ func findBuildParameter (params []WorkspaceBuildParameter , parameterName string ) ( * WorkspaceBuildParameter , bool ) {
93
95
for _ , p := range params {
94
96
if p .Name == parameterName {
95
- return & p
97
+ return & p , true
96
98
}
97
99
}
98
- return nil
100
+ return nil , false
99
101
}
100
102
101
103
func parameterValuesAsArray (options []TemplateVersionParameterOption ) []string {
0 commit comments