@@ -297,6 +297,7 @@ func (api *API) workspaceBuildByBuildNumber(rw http.ResponseWriter, r *http.Requ
297
297
// @Param request body codersdk.CreateWorkspaceBuildRequest true "Create workspace build request"
298
298
// @Success 200 {object} codersdk.WorkspaceBuild
299
299
// @Router /workspaces/{workspace}/builds [post]
300
+ // nolint:gocyclo
300
301
func (api * API ) postWorkspaceBuilds (rw http.ResponseWriter , r * http.Request ) {
301
302
ctx := r .Context ()
302
303
apiKey := httpmw .APIKey (r )
@@ -505,23 +506,34 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
505
506
}
506
507
}
507
508
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 len (legacyParameters ) > 0 && len (parameters ) > 0 {
522
+ httpapi .Write (ctx , rw , http .StatusBadRequest , codersdk.Response {
523
+ Message : "Rich parameters can't be used together with legacy parameters." ,
524
+ })
525
+ return
526
+ }
527
+
508
528
var workspaceBuild database.WorkspaceBuild
509
529
var provisionerJob database.ProvisionerJob
510
530
// This must happen in a transaction to ensure history can be inserted, and
511
531
// the prior history can update it's "after" column to point at the new.
512
532
err = api .Database .InTx (func (db database.Store ) error {
513
- existing , err := db .ParameterValues (ctx , database.ParameterValuesParams {
514
- Scopes : []database.ParameterScope {database .ParameterScopeWorkspace },
515
- ScopeIds : []uuid.UUID {workspace .ID },
516
- })
517
- if err != nil && ! xerrors .Is (err , sql .ErrNoRows ) {
518
- return xerrors .Errorf ("Fetch previous parameters: %w" , err )
519
- }
520
-
521
533
// Write/Update any new params
522
534
now := database .Now ()
523
535
for _ , param := range createBuild .ParameterValues {
524
- for _ , exists := range existing {
536
+ for _ , exists := range legacyParameters {
525
537
// If the param exists, delete the old param before inserting the new one
526
538
if exists .Name == param .Name {
527
539
err = db .DeleteParameterValueByID (ctx , exists .ID )
0 commit comments