+2
-18
spindle/db/events.go
+2
-18
spindle/db/events.go
···
18
18
EventJson string `json:"event"`
19
19
}
20
20
21
-
func (d *DB) InsertEvent(event Event, notifier *notifier.Notifier) error {
21
+
func (d *DB) insertEvent(event Event, notifier *notifier.Notifier) error {
22
22
_, err := d.Exec(
23
23
`insert into events (rkey, nsid, event, created) values (?, ?, ?, ?)`,
24
24
event.Rkey,
···
70
70
return evts, nil
71
71
}
72
72
73
-
func (d *DB) CreateStatusEvent(rkey string, s tangled.PipelineStatus, n *notifier.Notifier) error {
74
-
eventJson, err := json.Marshal(s)
75
-
if err != nil {
76
-
return err
77
-
}
78
-
79
-
event := Event{
80
-
Rkey: rkey,
81
-
Nsid: tangled.PipelineStatusNSID,
82
-
Created: time.Now().UnixNano(),
83
-
EventJson: string(eventJson),
84
-
}
85
-
86
-
return d.InsertEvent(event, n)
87
-
}
88
-
89
73
func (d *DB) createStatusEvent(
90
74
workflowId models.WorkflowId,
91
75
statusKind models.StatusKind,
···
116
100
EventJson: string(eventJson),
117
101
}
118
102
119
-
return d.InsertEvent(event, n)
103
+
return d.insertEvent(event, n)
120
104
121
105
}
122
106
+24
-13
spindle/engines/nixery/engine.go
+24
-13
spindle/engines/nixery/engine.go
···
179
179
return err
180
180
}
181
181
e.registerCleanup(wid, func(ctx context.Context) error {
182
-
return e.docker.NetworkRemove(ctx, networkName(wid))
182
+
if err := e.docker.NetworkRemove(ctx, networkName(wid)); err != nil {
183
+
return fmt.Errorf("removing network: %w", err)
184
+
}
185
+
return nil
183
186
})
184
187
185
188
addl := wf.Data.(addlFields)
···
229
232
return fmt.Errorf("creating container: %w", err)
230
233
}
231
234
e.registerCleanup(wid, func(ctx context.Context) error {
232
-
err = e.docker.ContainerStop(ctx, resp.ID, container.StopOptions{})
233
-
if err != nil {
234
-
return err
235
+
if err := e.docker.ContainerStop(ctx, resp.ID, container.StopOptions{}); err != nil {
236
+
return fmt.Errorf("stopping container: %w", err)
235
237
}
236
238
237
-
return e.docker.ContainerRemove(ctx, resp.ID, container.RemoveOptions{
239
+
err := e.docker.ContainerRemove(ctx, resp.ID, container.RemoveOptions{
238
240
RemoveVolumes: true,
239
241
RemoveLinks: false,
240
242
Force: false,
241
243
})
244
+
if err != nil {
245
+
return fmt.Errorf("removing container: %w", err)
246
+
}
247
+
return nil
242
248
})
243
249
244
-
err = e.docker.ContainerStart(ctx, resp.ID, container.StartOptions{})
245
-
if err != nil {
250
+
if err := e.docker.ContainerStart(ctx, resp.ID, container.StartOptions{}); err != nil {
246
251
return fmt.Errorf("starting container: %w", err)
247
252
}
248
253
···
394
399
}
395
400
396
401
func (e *Engine) DestroyWorkflow(ctx context.Context, wid models.WorkflowId) error {
397
-
e.cleanupMu.Lock()
398
-
key := wid.String()
399
-
400
-
fns := e.cleanup[key]
401
-
delete(e.cleanup, key)
402
-
e.cleanupMu.Unlock()
402
+
fns := e.drainCleanups(wid)
403
403
404
404
for _, fn := range fns {
405
405
if err := fn(ctx); err != nil {
···
415
415
416
416
key := wid.String()
417
417
e.cleanup[key] = append(e.cleanup[key], fn)
418
+
}
419
+
420
+
func (e *Engine) drainCleanups(wid models.WorkflowId) []cleanupFunc {
421
+
e.cleanupMu.Lock()
422
+
key := wid.String()
423
+
424
+
fns := e.cleanup[key]
425
+
delete(e.cleanup, key)
426
+
e.cleanupMu.Unlock()
427
+
428
+
return fns
418
429
}
419
430
420
431
func networkName(wid models.WorkflowId) string {
+4
-4
spindle/server.go
+4
-4
spindle/server.go
···
302
302
tpl.TriggerMetadata.Repo.Repo,
303
303
)
304
304
if err != nil {
305
-
return err
305
+
return fmt.Errorf("failed to get repo: %w", err)
306
306
}
307
307
308
308
pipelineId := models.PipelineId{
···
323
323
Name: w.Name,
324
324
}, fmt.Sprintf("unknown engine %#v", w.Engine), -1, s.n)
325
325
if err != nil {
326
-
return err
326
+
return fmt.Errorf("db.StatusFailed: %w", err)
327
327
}
328
328
329
329
continue
···
337
337
338
338
ewf, err := s.engs[w.Engine].InitWorkflow(*w, tpl)
339
339
if err != nil {
340
-
return err
340
+
return fmt.Errorf("init workflow: %w", err)
341
341
}
342
342
343
343
// inject TANGLED_* env vars after InitWorkflow
···
354
354
Name: w.Name,
355
355
}, s.n)
356
356
if err != nil {
357
-
return err
357
+
return fmt.Errorf("db.StatusPending: %w", err)
358
358
}
359
359
}
360
360
}