feat: import value from legacy variable to build parameter (#6556)

This commit is contained in:
Marcin Tojek
2023-03-14 12:02:44 +00:00
committed by GitHub
parent bc26c4a27f
commit 7587850a1c
24 changed files with 576 additions and 296 deletions
+33 -20
View File
@@ -496,6 +496,39 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
}
apiLastBuildParameters := convertWorkspaceBuildParameters(lastBuildParameters)
legacyParameters, err := api.Database.ParameterValues(ctx, database.ParameterValuesParams{
Scopes: []database.ParameterScope{database.ParameterScopeWorkspace},
ScopeIds: []uuid.UUID{workspace.ID},
})
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Error fetching previous legacy parameters.",
Detail: err.Error(),
})
return
}
// Rich parameters migration: include legacy variables to the last build parameters
for _, templateVersionParameter := range templateVersionParameters {
// Check if parameter is defined in previous build
if _, found := findWorkspaceBuildParameter(apiLastBuildParameters, templateVersionParameter.Name); found {
continue
}
// Check if legacy variable is defined
for _, legacyParameter := range legacyParameters {
if legacyParameter.Name != templateVersionParameter.LegacyVariableName {
continue
}
apiLastBuildParameters = append(apiLastBuildParameters, codersdk.WorkspaceBuildParameter{
Name: templateVersionParameter.Name,
Value: legacyParameter.SourceValue,
})
break
}
}
err = codersdk.ValidateWorkspaceBuildParameters(templateVersionParameters, createBuild.RichParameterValues, apiLastBuildParameters)
if err != nil {
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
@@ -525,26 +558,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
}
}
legacyParameters, err := api.Database.ParameterValues(ctx, database.ParameterValuesParams{
Scopes: []database.ParameterScope{database.ParameterScopeWorkspace},
ScopeIds: []uuid.UUID{workspace.ID},
})
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Error fetching previous legacy parameters.",
Detail: err.Error(),
})
return
}
if createBuild.Transition == codersdk.WorkspaceTransitionStart &&
len(legacyParameters) > 0 && len(parameters) > 0 {
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
Message: "Rich parameters can't be used together with legacy parameters.",
})
return
}
var workspaceBuild database.WorkspaceBuild
var provisionerJob database.ProvisionerJob
// This must happen in a transaction to ensure history can be inserted, and