@@ -300,6 +300,7 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
300
300
return
301
301
}
302
302
303
+ var parameters []codersdk.WorkspaceBuildParameter
303
304
var state []byte
304
305
// If custom state, deny request since user could be corrupting or leaking
305
306
// cloud state.
@@ -312,6 +313,9 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
312
313
}
313
314
state = createBuild .ProvisionerState
314
315
}
316
+ if createBuild .Parameters != nil {
317
+ parameters = createBuild .Parameters
318
+ }
315
319
316
320
if createBuild .Orphan {
317
321
if createBuild .Transition != codersdk .WorkspaceTransitionDelete {
@@ -382,6 +386,23 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
382
386
if state == nil {
383
387
state = priorHistory .ProvisionerState
384
388
}
389
+ if parameters == nil {
390
+ buildParameters , err := api .Database .GetWorkspaceBuildParameters (ctx , priorHistory .ID )
391
+ if err != nil {
392
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
393
+ Message : "Internal error fetching prior workspace build parameters." ,
394
+ Detail : err .Error (),
395
+ })
396
+ return
397
+ }
398
+ parameters = make ([]codersdk.WorkspaceBuildParameter , 0 , len (buildParameters ))
399
+ for _ , param := range buildParameters {
400
+ parameters = append (parameters , codersdk.WorkspaceBuildParameter {
401
+ Name : param .Name ,
402
+ Value : param .Value ,
403
+ })
404
+ }
405
+ }
385
406
386
407
var workspaceBuild database.WorkspaceBuild
387
408
var provisionerJob database.ProvisionerJob
@@ -398,7 +419,7 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
398
419
399
420
// Write/Update any new params
400
421
now := database .Now ()
401
- for _ , param := range createBuild .ParameterValues {
422
+ for _ , param := range createBuild .DeprecatedParameterValues {
402
423
for _ , exists := range existing {
403
424
// If the param exists, delete the old param before inserting the new one
404
425
if exists .Name == param .Name {
@@ -426,6 +447,21 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
426
447
}
427
448
428
449
workspaceBuildID := uuid .New ()
450
+ names := make ([]string , 0 , len (parameters ))
451
+ values := make ([]string , 0 , len (parameters ))
452
+ for _ , param := range parameters {
453
+ names = append (names , param .Name )
454
+ values = append (values , param .Value )
455
+ }
456
+ err = db .InsertWorkspaceBuildParameters (ctx , database.InsertWorkspaceBuildParametersParams {
457
+ WorkspaceBuildID : workspaceBuildID ,
458
+ Name : names ,
459
+ Value : values ,
460
+ })
461
+ if err != nil {
462
+ return xerrors .Errorf ("insert workspace build parameter: %w" , err )
463
+ }
464
+
429
465
input , err := json .Marshal (workspaceProvisionJob {
430
466
WorkspaceBuildID : workspaceBuildID ,
431
467
})
0 commit comments