Skip to content

Commit 1e41500

Browse files
committed
Prompt for changed parameter option
1 parent 1c64cfe commit 1e41500

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

cli/parameterresolver.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ next:
141141
continue // immutables should not be passed to consecutive builds
142142
}
143143

144+
if len(tvp.Options) > 0 && !isValidTemplateParameterOption(buildParameter, tvp.Options) {
145+
continue // do not propagate invalid options
146+
}
147+
144148
for i, r := range resolved {
145149
if r.Name == buildParameter.Name {
146150
resolved[i].Value = buildParameter.Value
@@ -180,10 +184,11 @@ func (pr *ParameterResolver) resolveWithInput(resolved []codersdk.WorkspaceBuild
180184
// Parameter has not been resolved yet, so CLI needs to determine if user should input it.
181185

182186
firstTimeUse := pr.isFirstTimeUse(tvp.Name)
183-
187+
promptParameterOption := pr.isLastBuildParameterInvalidOption(tvp)
184188
if (tvp.Ephemeral && pr.promptBuildOptions) ||
185189
(action == WorkspaceCreate && tvp.Required) ||
186190
(action == WorkspaceCreate && !tvp.Ephemeral) ||
191+
(action == WorkspaceUpdate && promptParameterOption) ||
187192
(action == WorkspaceUpdate && !tvp.Mutable && firstTimeUse) ||
188193
(action == WorkspaceUpdate && tvp.Mutable && !tvp.Ephemeral && pr.promptRichParameters) {
189194
parameterValue, err := cliui.RichParameter(inv, tvp)
@@ -206,6 +211,19 @@ func (pr *ParameterResolver) isFirstTimeUse(parameterName string) bool {
206211
return findWorkspaceBuildParameter(parameterName, pr.lastBuildParameters) == nil
207212
}
208213

214+
func (pr *ParameterResolver) isLastBuildParameterInvalidOption(templateVersionParameter codersdk.TemplateVersionParameter) bool {
215+
if len(templateVersionParameter.Options) == 0 {
216+
return false
217+
}
218+
219+
for _, buildParameter := range pr.lastBuildParameters {
220+
if buildParameter.Name == templateVersionParameter.Name {
221+
return !isValidTemplateParameterOption(buildParameter, templateVersionParameter.Options)
222+
}
223+
}
224+
return false
225+
}
226+
209227
func findTemplateVersionParameter(workspaceBuildParameter codersdk.WorkspaceBuildParameter, templateVersionParameters []codersdk.TemplateVersionParameter) *codersdk.TemplateVersionParameter {
210228
for _, tvp := range templateVersionParameters {
211229
if tvp.Name == workspaceBuildParameter.Name {
@@ -223,3 +241,12 @@ func findWorkspaceBuildParameter(parameterName string, params []codersdk.Workspa
223241
}
224242
return nil
225243
}
244+
245+
func isValidTemplateParameterOption(buildParameter codersdk.WorkspaceBuildParameter, options []codersdk.TemplateVersionParameterOption) bool {
246+
for _, opt := range options {
247+
if opt.Value == buildParameter.Value {
248+
return true
249+
}
250+
}
251+
return false
252+
}

cli/update_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,8 @@ func TestUpdateValidateRichParameters(t *testing.T) {
715715
}()
716716

717717
matches := []string{
718-
"aaaa", "",
718+
stringParameterName, "second_option",
719+
"Planning workspace...", "",
719720
}
720721
for i := 0; i < len(matches); i += 2 {
721722
match := matches[i]

0 commit comments

Comments
 (0)