Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

spindle/{db,engine}: propagate a notifier

Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>

+12 -10
+11 -9
spindle/engine/engine.go
··· 18 18 "github.com/docker/docker/pkg/stdcopy" 19 19 "golang.org/x/sync/errgroup" 20 20 "tangled.sh/tangled.sh/core/api/tangled" 21 + "tangled.sh/tangled.sh/core/knotserver/notifier" 21 22 "tangled.sh/tangled.sh/core/log" 22 23 "tangled.sh/tangled.sh/core/spindle/db" 23 24 ) ··· 31 30 docker client.APIClient 32 31 l *slog.Logger 33 32 db *db.DB 33 + n *notifier.Notifier 34 34 } 35 35 36 - func New(ctx context.Context, db *db.DB) (*Engine, error) { 36 + func New(ctx context.Context, db *db.DB, n *notifier.Notifier) (*Engine, error) { 37 37 dcli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) 38 38 if err != nil { 39 39 return nil, err ··· 42 40 43 41 l := log.FromContext(ctx).With("component", "spindle") 44 42 45 - return &Engine{docker: dcli, l: l, db: db}, nil 43 + return &Engine{docker: dcli, l: l, db: db, n: n}, nil 46 44 } 47 45 48 46 // SetupPipeline sets up a new network for the pipeline, and possibly volumes etc. ··· 73 71 return err 74 72 } 75 73 76 - err = e.db.CreatePipeline(id) 74 + err = e.db.CreatePipeline(id, e.n) 77 75 return err 78 76 } 79 77 80 78 func (e *Engine) StartWorkflows(ctx context.Context, pipeline *tangled.Pipeline, id string) error { 81 79 e.l.Info("starting all workflows in parallel", "pipeline", id) 82 80 83 - err := e.db.MarkPipelineRunning(id) 81 + err := e.db.MarkPipelineRunning(id, e.n) 84 82 if err != nil { 85 83 return err 86 84 } ··· 103 101 reader, err := e.docker.ImagePull(ctx, cimg, image.PullOptions{}) 104 102 if err != nil { 105 103 e.l.Error("pipeline failed!", "id", id, "error", err.Error()) 106 - err := e.db.MarkPipelineFailed(id, -1, err.Error()) 104 + err := e.db.MarkPipelineFailed(id, -1, err.Error(), e.n) 107 105 if err != nil { 108 106 return err 109 107 } ··· 115 113 err = e.StartSteps(ctx, w.Steps, id, cimg) 116 114 if err != nil { 117 115 e.l.Error("pipeline failed!", "id", id, "error", err.Error()) 118 - return e.db.MarkPipelineFailed(id, -1, err.Error()) 116 + return e.db.MarkPipelineFailed(id, -1, err.Error(), e.n) 119 117 } 120 118 121 119 return nil ··· 125 123 err = g.Wait() 126 124 if err != nil { 127 125 e.l.Error("pipeline failed!", "id", id, "error", err.Error()) 128 - return e.db.MarkPipelineFailed(id, -1, err.Error()) 126 + return e.db.MarkPipelineFailed(id, -1, err.Error(), e.n) 129 127 } 130 128 131 129 e.l.Info("pipeline success!", "id", id) 132 - return e.db.MarkPipelineSuccess(id) 130 + return e.db.MarkPipelineSuccess(id, e.n) 133 131 } 134 132 135 133 // StartSteps starts all steps sequentially with the same base image. ··· 183 181 184 182 if state.ExitCode != 0 { 185 183 e.l.Error("pipeline failed!", "id", id, "error", state.Error, "exit_code", state.ExitCode) 186 - return e.db.MarkPipelineFailed(id, state.ExitCode, state.Error) 184 + return e.db.MarkPipelineFailed(id, state.ExitCode, state.Error, e.n) 187 185 } 188 186 } 189 187
+1 -1
spindle/server.go
··· 53 53 54 54 n := notifier.New() 55 55 56 - eng, err := engine.New(ctx, d) 56 + eng, err := engine.New(ctx, d, &n) 57 57 if err != nil { 58 58 return err 59 59 }