@@ -209,45 +209,54 @@ func build(ctx context.Context, store database.Store, workspace database.Workspa
209
209
}
210
210
provisionerJobID := uuid .New ()
211
211
now := database .Now ()
212
- newProvisionerJob , err := store .InsertProvisionerJob (ctx , database.InsertProvisionerJobParams {
213
- ID : provisionerJobID ,
214
- CreatedAt : now ,
215
- UpdatedAt : now ,
216
- InitiatorID : workspace .OwnerID ,
217
- OrganizationID : template .OrganizationID ,
218
- Provisioner : template .Provisioner ,
219
- Type : database .ProvisionerJobTypeWorkspaceBuild ,
220
- StorageMethod : priorJob .StorageMethod ,
221
- StorageSource : priorJob .StorageSource ,
222
- Input : input ,
223
- })
224
- if err != nil {
225
- return xerrors .Errorf ("insert provisioner job: %w" , err )
226
- }
227
212
228
213
var buildReason database.BuildReason
229
214
switch trans {
230
215
case database .WorkspaceTransitionStart :
231
216
buildReason = database .BuildReasonAutostart
232
217
case database .WorkspaceTransitionStop :
233
218
buildReason = database .BuildReasonAutostop
219
+ default :
220
+ return xerrors .Errorf ("Unsupported transition: %q" , trans )
234
221
}
235
- _ , err = store .InsertWorkspaceBuild (ctx , database.InsertWorkspaceBuildParams {
236
- ID : workspaceBuildID ,
237
- CreatedAt : now ,
238
- UpdatedAt : now ,
239
- WorkspaceID : workspace .ID ,
240
- TemplateVersionID : priorHistory .TemplateVersionID ,
241
- BuildNumber : priorBuildNumber + 1 ,
242
- Name : namesgenerator .GetRandomName (1 ),
243
- ProvisionerState : priorHistory .ProvisionerState ,
244
- InitiatorID : workspace .OwnerID ,
245
- Transition : trans ,
246
- JobID : newProvisionerJob .ID ,
247
- Reason : buildReason ,
222
+
223
+ err = store .InTx (func (store database.Store ) error {
224
+ newProvisionerJob , err := store .InsertProvisionerJob (ctx , database.InsertProvisionerJobParams {
225
+ ID : provisionerJobID ,
226
+ CreatedAt : now ,
227
+ UpdatedAt : now ,
228
+ InitiatorID : workspace .OwnerID ,
229
+ OrganizationID : template .OrganizationID ,
230
+ Provisioner : template .Provisioner ,
231
+ Type : database .ProvisionerJobTypeWorkspaceBuild ,
232
+ StorageMethod : priorJob .StorageMethod ,
233
+ StorageSource : priorJob .StorageSource ,
234
+ Input : input ,
235
+ })
236
+ if err != nil {
237
+ return xerrors .Errorf ("insert provisioner job: %w" , err )
238
+ }
239
+ _ , err = store .InsertWorkspaceBuild (ctx , database.InsertWorkspaceBuildParams {
240
+ ID : workspaceBuildID ,
241
+ CreatedAt : now ,
242
+ UpdatedAt : now ,
243
+ WorkspaceID : workspace .ID ,
244
+ TemplateVersionID : priorHistory .TemplateVersionID ,
245
+ BuildNumber : priorBuildNumber + 1 ,
246
+ Name : namesgenerator .GetRandomName (1 ),
247
+ ProvisionerState : priorHistory .ProvisionerState ,
248
+ InitiatorID : workspace .OwnerID ,
249
+ Transition : trans ,
250
+ JobID : newProvisionerJob .ID ,
251
+ Reason : buildReason ,
252
+ })
253
+ if err != nil {
254
+ return xerrors .Errorf ("insert workspace build: %w" , err )
255
+ }
256
+ return nil
248
257
})
249
258
if err != nil {
250
- return xerrors . Errorf ( "insert workspace build: %w" , err )
259
+ return err
251
260
}
252
261
return nil
253
262
}
0 commit comments