All of mesh-build-go's buildstep Go module leaves mesh-catalog for modules/mesh-delivery-sdk: the step run, fetch and release and the regenerate-and-compare step as the package steprun, the CPU share as steprun/buildcpu, the conformance kit as steprun/conformance, the seat generator as seatgen with cmd/seatgen, and cmd/mesh-pack. The three build modules and the builder's and checker's tests import the SDK and keep no copy; the SDK requires nothing of mesh-catalog. Code the build modules share is the delivery domain's SDK, not one module's package. It carries the build-module round's two new files of that package (dropdetected.go 247c422f, storedbuilds.go 904b8aed). Builds: design 47 G §464, §680, §327, §420, §495 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
package steprun
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
sdkstep "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-sdk/buildstep"
|
|
stdio "git.novox.be/novox/mesh-sdk/go"
|
|
)
|
|
|
|
// 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
|
|
// SettleAfter is stdio.SeatSettleAfter when nil (ADR 0664 §1).
|
|
SettleAfter func(id string, delay time.Duration) 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 := sdkstep.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
|
|
}
|
|
after := s.SettleAfter
|
|
if after == nil {
|
|
after = stdio.SeatSettleAfter
|
|
}
|
|
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),
|
|
NakAfter: func(delay time.Duration) error { return after(p.ID, delay) }}, nil
|
|
}
|