@@ -496,6 +496,39 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
496
496
}
497
497
apiLastBuildParameters := convertWorkspaceBuildParameters (lastBuildParameters )
498
498
499
+ legacyParameters , err := api .Database .ParameterValues (ctx , database.ParameterValuesParams {
500
+ Scopes : []database.ParameterScope {database .ParameterScopeWorkspace },
501
+ ScopeIds : []uuid.UUID {workspace .ID },
502
+ })
503
+ if err != nil && ! xerrors .Is (err , sql .ErrNoRows ) {
504
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
505
+ Message : "Error fetching previous legacy parameters." ,
506
+ Detail : err .Error (),
507
+ })
508
+ return
509
+ }
510
+
511
+ // Rich parameters migration: include legacy variables to the last build parameters
512
+ for _ , templateVersionParameter := range templateVersionParameters {
513
+ // Check if parameter is defined in previous build
514
+ if _ , found := findWorkspaceBuildParameter (apiLastBuildParameters , templateVersionParameter .Name ); found {
515
+ continue
516
+ }
517
+
518
+ // Check if legacy variable is defined
519
+ for _ , legacyParameter := range legacyParameters {
520
+ if legacyParameter .Name != templateVersionParameter .LegacyVariableName {
521
+ continue
522
+ }
523
+
524
+ apiLastBuildParameters = append (apiLastBuildParameters , codersdk.WorkspaceBuildParameter {
525
+ Name : templateVersionParameter .Name ,
526
+ Value : legacyParameter .SourceValue ,
527
+ })
528
+ break
529
+ }
530
+ }
531
+
499
532
err = codersdk .ValidateWorkspaceBuildParameters (templateVersionParameters , createBuild .RichParameterValues , apiLastBuildParameters )
500
533
if err != nil {
501
534
httpapi .Write (ctx , rw , http .StatusBadRequest , codersdk.Response {
@@ -525,26 +558,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
525
558
}
526
559
}
527
560
528
- legacyParameters , err := api .Database .ParameterValues (ctx , database.ParameterValuesParams {
529
- Scopes : []database.ParameterScope {database .ParameterScopeWorkspace },
530
- ScopeIds : []uuid.UUID {workspace .ID },
531
- })
532
- if err != nil && ! xerrors .Is (err , sql .ErrNoRows ) {
533
- httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
534
- Message : "Error fetching previous legacy parameters." ,
535
- Detail : err .Error (),
536
- })
537
- return
538
- }
539
-
540
- if createBuild .Transition == codersdk .WorkspaceTransitionStart &&
541
- len (legacyParameters ) > 0 && len (parameters ) > 0 {
542
- httpapi .Write (ctx , rw , http .StatusBadRequest , codersdk.Response {
543
- Message : "Rich parameters can't be used together with legacy parameters." ,
544
- })
545
- return
546
- }
547
-
548
561
var workspaceBuild database.WorkspaceBuild
549
562
var provisionerJob database.ProvisionerJob
550
563
// This must happen in a transaction to ensure history can be inserted, and
0 commit comments