Skip to content

Commit 5b33236

Browse files
committed
fix: coder_parameter fallbacks to default
1 parent 4353ad7 commit 5b33236

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

coderd/workspacebuilds.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,15 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
544544
// Check if parameter is defined in previous build
545545
if buildParameter, found := findWorkspaceBuildParameter(apiLastBuildParameters, templateVersionParameter.Name); found {
546546
parameters = append(parameters, *buildParameter)
547+
continue
548+
}
549+
550+
// Check if default parameter value is in schema
551+
if templateVersionParameter.DefaultValue != "" {
552+
parameters = append(parameters, codersdk.WorkspaceBuildParameter{
553+
Name: templateVersionParameter.Name,
554+
Value: templateVersionParameter.DefaultValue,
555+
})
547556
}
548557
}
549558

coderd/workspacebuilds_test.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -898,12 +898,23 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
898898
nextBuildParameters := []codersdk.WorkspaceBuildParameter{
899899
{Name: newImmutableParameterName, Value: "good"},
900900
}
901-
_, err = client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
901+
nextWorkspaceBuild, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
902902
TemplateVersionID: version2.ID,
903903
Transition: codersdk.WorkspaceTransitionStart,
904904
RichParameterValues: nextBuildParameters,
905905
})
906906
require.NoError(t, err)
907+
require.NotEqual(t, workspaceBuild, nextWorkspaceBuild)
908+
coderdtest.AwaitWorkspaceBuildJob(t, client, nextWorkspaceBuild.ID)
909+
910+
workspaceBuildParameters, err := client.WorkspaceBuildParameters(ctx, nextWorkspaceBuild.ID)
911+
require.NoError(t, err)
912+
913+
expectedNextBuildParameters := append(initialBuildParameters, codersdk.WorkspaceBuildParameter{
914+
Name: newImmutableParameterName,
915+
Value: "good",
916+
})
917+
require.ElementsMatch(t, expectedNextBuildParameters, workspaceBuildParameters)
907918
})
908919

909920
t.Run("NewImmutableOptionalParameterUsesDefault", func(t *testing.T) {
@@ -958,12 +969,23 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
958969
defer cancel()
959970

960971
var nextBuildParameters []codersdk.WorkspaceBuildParameter
961-
_, err = client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
972+
nextWorkspaceBuild, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
962973
TemplateVersionID: version2.ID,
963974
Transition: codersdk.WorkspaceTransitionStart,
964975
RichParameterValues: nextBuildParameters,
965976
})
966977
require.NoError(t, err)
978+
require.NotEqual(t, workspaceBuild, nextWorkspaceBuild)
979+
coderdtest.AwaitWorkspaceBuildJob(t, client, nextWorkspaceBuild.ID)
980+
981+
workspaceBuildParameters, err := client.WorkspaceBuildParameters(ctx, nextWorkspaceBuild.ID)
982+
require.NoError(t, err)
983+
984+
expectedNextBuildParameters := append(initialBuildParameters, codersdk.WorkspaceBuildParameter{
985+
Name: newImmutableParameterName,
986+
Value: "12345",
987+
})
988+
require.ElementsMatch(t, expectedNextBuildParameters, workspaceBuildParameters)
967989
})
968990
}
969991

site/src/api/api.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,15 +1057,19 @@ const getMissingParameters = (
10571057
const requiredParameters: TypesGen.TemplateVersionParameter[] = []
10581058

10591059
templateParameters.forEach((p) => {
1060-
// Legacy parameters should be required. So we can migrate them.
1061-
const isLegacy = p.legacy_variable_name === undefined
1060+
// Legacy parameters should not be required. Backend can just migrate them.
1061+
const isLegacy = p.legacy_variable_name !== undefined
10621062
// It is mutable and required. Mutable values can be changed after so we
10631063
// don't need to ask them if they are not required.
10641064
const isMutableAndRequired = p.mutable && p.required
10651065
// Is immutable, so we can check if it is its first time on the build
10661066
const isImmutable = !p.mutable
10671067

1068-
if (isLegacy || isMutableAndRequired || isImmutable) {
1068+
if (isLegacy) {
1069+
return
1070+
}
1071+
1072+
if (isMutableAndRequired || isImmutable) {
10691073
requiredParameters.push(p)
10701074
return
10711075
}

0 commit comments

Comments
 (0)