@@ -477,6 +477,38 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
477
477
}
478
478
apiLastBuildParameters := convertWorkspaceBuildParameters (lastBuildParameters )
479
479
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
+
480
512
err = codersdk .ValidateWorkspaceBuildParameters (templateVersionParameters , createBuild .RichParameterValues , apiLastBuildParameters )
481
513
if err != nil {
482
514
httpapi .Write (ctx , rw , http .StatusBadRequest , codersdk.Response {
@@ -506,26 +538,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
506
538
}
507
539
}
508
540
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
-
529
541
var workspaceBuild database.WorkspaceBuild
530
542
var provisionerJob database.ProvisionerJob
531
543
// This must happen in a transaction to ensure history can be inserted, and
0 commit comments