package buildstep import ( "context" "time" stdio "git.novox.be/novox/mesh-sdk/go" "git.novox.be/novox/mesh-sdk/go/delivery" ) // SeatAsks is a build seat's workers as a tools bundle reaches them: through its runtime's seat pull and settle // (stdio.SeatPull, SeatSettle; issue 1887 A11), one message per pull, only from the workers the module's membership // lists. type SeatAsks struct { Language string // Pull and Settle are stdio.SeatPull and stdio.SeatSettle when nil; a test gives its own. Pull func(worker string, wait time.Duration) (*stdio.Pulled, error) Settle func(id, fate string) error } // Next is AskSource's. func (s SeatAsks) Next(ctx context.Context, kind string, wait time.Duration) (*Pulled, error) { pull, settle := s.Pull, s.Settle if pull == nil { pull = stdio.SeatPull } if settle == nil { settle = stdio.SeatSettle } worker, err := delivery.AskWorker(s.Language, kind) if err != nil { return nil, err } if err := ctx.Err(); err != nil { return nil, err } p, err := pull(worker, wait) if err != nil || p == nil { return nil, err } fate := func(f string) func() error { return func() error { return settle(p.ID, f) } } return &Pulled{Data: p.Body, Delivered: p.Delivered, Ack: fate(stdio.SettleAck), InProgress: fate(stdio.SettleProgress), Nak: fate(stdio.SettleNak), Term: fate(stdio.SettleTerm)}, nil }