Skip to content

Commit 49f2cc6

Browse files
committed
feat: import value from legacy variable to build parameter
1 parent 40c9ba3 commit 49f2cc6

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

coderd/workspacebuilds.go

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,38 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
477477
}
478478
apiLastBuildParameters := convertWorkspaceBuildParameters(lastBuildParameters)
479479

480+
legacyParameters, err := api.Database.ParameterValues(ctx, database.ParameterValuesParams{
481+
Scopes: []database.ParameterScope{database.ParameterScopeWorkspace},
482+
ScopeIds: []uuid.UUID{workspace.ID},
483+
})
484+
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
485+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
486+
Message: "Error fetching previous legacy parameters.",
487+
Detail: err.Error(),
488+
})
489+
return
490+
}
491+
492+
// Rich parameters migration: include legacy variables to the last build parameters
493+
for _, templateVersionParameter := range templateVersionParameters {
494+
// Check if parameter is defined in previous build
495+
if _, found := findWorkspaceBuildParameter(apiLastBuildParameters, templateVersionParameter.Name); found {
496+
continue
497+
}
498+
499+
for _, legacyParameter := range legacyParameters {
500+
if legacyParameter.Name != templateVersionParameter.Name {
501+
continue
502+
}
503+
504+
apiLastBuildParameters = append(apiLastBuildParameters, codersdk.WorkspaceBuildParameter{
505+
Name: templateVersionParameter.Name,
506+
Value: legacyParameter.SourceValue,
507+
})
508+
break
509+
}
510+
}
511+
480512
err = codersdk.ValidateWorkspaceBuildParameters(templateVersionParameters, createBuild.RichParameterValues, apiLastBuildParameters)
481513
if err != nil {
482514
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
@@ -506,26 +538,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
506538
}
507539
}
508540

509-
legacyParameters, err := api.Database.ParameterValues(ctx, database.ParameterValuesParams{
510-
Scopes: []database.ParameterScope{database.ParameterScopeWorkspace},
511-
ScopeIds: []uuid.UUID{workspace.ID},
512-
})
513-
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
514-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
515-
Message: "Error fetching previous legacy parameters.",
516-
Detail: err.Error(),
517-
})
518-
return
519-
}
520-
521-
if createBuild.Transition == codersdk.WorkspaceTransitionStart &&
522-
len(legacyParameters) > 0 && len(parameters) > 0 {
523-
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
524-
Message: "Rich parameters can't be used together with legacy parameters.",
525-
})
526-
return
527-
}
528-
529541
var workspaceBuild database.WorkspaceBuild
530542
var provisionerJob database.ProvisionerJob
531543
// This must happen in a transaction to ensure history can be inserted, and

0 commit comments

Comments
 (0)