mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
fix: coder_parameter fallbacks to default (#7240)
This commit is contained in:
@ -544,6 +544,15 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
|
|||||||
// Check if parameter is defined in previous build
|
// Check if parameter is defined in previous build
|
||||||
if buildParameter, found := findWorkspaceBuildParameter(apiLastBuildParameters, templateVersionParameter.Name); found {
|
if buildParameter, found := findWorkspaceBuildParameter(apiLastBuildParameters, templateVersionParameter.Name); found {
|
||||||
parameters = append(parameters, *buildParameter)
|
parameters = append(parameters, *buildParameter)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if default parameter value is in schema
|
||||||
|
if templateVersionParameter.DefaultValue != "" {
|
||||||
|
parameters = append(parameters, codersdk.WorkspaceBuildParameter{
|
||||||
|
Name: templateVersionParameter.Name,
|
||||||
|
Value: templateVersionParameter.DefaultValue,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -901,12 +901,23 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
|
|||||||
nextBuildParameters := []codersdk.WorkspaceBuildParameter{
|
nextBuildParameters := []codersdk.WorkspaceBuildParameter{
|
||||||
{Name: newImmutableParameterName, Value: "good"},
|
{Name: newImmutableParameterName, Value: "good"},
|
||||||
}
|
}
|
||||||
_, err = client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
|
nextWorkspaceBuild, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
|
||||||
TemplateVersionID: version2.ID,
|
TemplateVersionID: version2.ID,
|
||||||
Transition: codersdk.WorkspaceTransitionStart,
|
Transition: codersdk.WorkspaceTransitionStart,
|
||||||
RichParameterValues: nextBuildParameters,
|
RichParameterValues: nextBuildParameters,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
require.NotEqual(t, workspaceBuild, nextWorkspaceBuild)
|
||||||
|
coderdtest.AwaitWorkspaceBuildJob(t, client, nextWorkspaceBuild.ID)
|
||||||
|
|
||||||
|
workspaceBuildParameters, err := client.WorkspaceBuildParameters(ctx, nextWorkspaceBuild.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expectedNextBuildParameters := append(initialBuildParameters, codersdk.WorkspaceBuildParameter{
|
||||||
|
Name: newImmutableParameterName,
|
||||||
|
Value: "good",
|
||||||
|
})
|
||||||
|
require.ElementsMatch(t, expectedNextBuildParameters, workspaceBuildParameters)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("NewImmutableOptionalParameterUsesDefault", func(t *testing.T) {
|
t.Run("NewImmutableOptionalParameterUsesDefault", func(t *testing.T) {
|
||||||
@ -961,12 +972,23 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
var nextBuildParameters []codersdk.WorkspaceBuildParameter
|
var nextBuildParameters []codersdk.WorkspaceBuildParameter
|
||||||
_, err = client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
|
nextWorkspaceBuild, err := client.CreateWorkspaceBuild(ctx, workspace.ID, codersdk.CreateWorkspaceBuildRequest{
|
||||||
TemplateVersionID: version2.ID,
|
TemplateVersionID: version2.ID,
|
||||||
Transition: codersdk.WorkspaceTransitionStart,
|
Transition: codersdk.WorkspaceTransitionStart,
|
||||||
RichParameterValues: nextBuildParameters,
|
RichParameterValues: nextBuildParameters,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
require.NotEqual(t, workspaceBuild, nextWorkspaceBuild)
|
||||||
|
coderdtest.AwaitWorkspaceBuildJob(t, client, nextWorkspaceBuild.ID)
|
||||||
|
|
||||||
|
workspaceBuildParameters, err := client.WorkspaceBuildParameters(ctx, nextWorkspaceBuild.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
expectedNextBuildParameters := append(initialBuildParameters, codersdk.WorkspaceBuildParameter{
|
||||||
|
Name: newImmutableParameterName,
|
||||||
|
Value: "12345",
|
||||||
|
})
|
||||||
|
require.ElementsMatch(t, expectedNextBuildParameters, workspaceBuildParameters)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1057,15 +1057,19 @@ const getMissingParameters = (
|
|||||||
const requiredParameters: TypesGen.TemplateVersionParameter[] = []
|
const requiredParameters: TypesGen.TemplateVersionParameter[] = []
|
||||||
|
|
||||||
templateParameters.forEach((p) => {
|
templateParameters.forEach((p) => {
|
||||||
// Legacy parameters should be required. So we can migrate them.
|
// Legacy parameters should not be required. Backend can just migrate them.
|
||||||
const isLegacy = p.legacy_variable_name === undefined
|
const isLegacy = p.legacy_variable_name !== undefined
|
||||||
// It is mutable and required. Mutable values can be changed after so we
|
// It is mutable and required. Mutable values can be changed after so we
|
||||||
// don't need to ask them if they are not required.
|
// don't need to ask them if they are not required.
|
||||||
const isMutableAndRequired = p.mutable && p.required
|
const isMutableAndRequired = p.mutable && p.required
|
||||||
// Is immutable, so we can check if it is its first time on the build
|
// Is immutable, so we can check if it is its first time on the build
|
||||||
const isImmutable = !p.mutable
|
const isImmutable = !p.mutable
|
||||||
|
|
||||||
if (isLegacy || isMutableAndRequired || isImmutable) {
|
if (isLegacy) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMutableAndRequired || isImmutable) {
|
||||||
requiredParameters.push(p)
|
requiredParameters.push(p)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user