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
40 lines
981 B
Go
40 lines
981 B
Go
package steprun
|
|
|
|
import (
|
|
"encoding/json"
|
|
"sync"
|
|
"testing"
|
|
|
|
stdio "git.novox.be/novox/mesh-sdk/go"
|
|
)
|
|
|
|
// configWatch is a double of stdio.WatchConfig: it hands the value now at the start, as the runtime does, and a test
|
|
// hands each change after with set.
|
|
type configWatch struct {
|
|
mu sync.Mutex
|
|
value string
|
|
handle func(stdio.ProvisionChange) error
|
|
asked string
|
|
}
|
|
|
|
func (w *configWatch) watch(key string, handle func(stdio.ProvisionChange) error) error {
|
|
w.mu.Lock()
|
|
w.asked, w.handle = key, handle
|
|
value := w.value
|
|
w.mu.Unlock()
|
|
return handle(stdio.ProvisionChange{Kind: "config", Key: key, Value: json.RawMessage(value)})
|
|
}
|
|
|
|
func (w *configWatch) set(t *testing.T, value string) {
|
|
t.Helper()
|
|
w.mu.Lock()
|
|
handle, key := w.handle, w.asked
|
|
w.mu.Unlock()
|
|
if handle == nil {
|
|
t.Fatal("the puller watches no config value")
|
|
}
|
|
if err := handle(stdio.ProvisionChange{Kind: "config", Key: key, Value: json.RawMessage(value)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|