package main // The module's own forge key (novox/hq ADR 0466 §2, issue 1484): mesh-sdk's key keeper, kind builder, for the // module's account in its home. It makes ~/.ssh/mesh_ed25519 when it is missing and writes one entry to this // module's `keys` state at ., which gitea's provider reads to register the key on the forge user // that reads and pushes nothing (ADR 0466 §3). import ( "context" "fmt" "os" "os/user" "strings" "time" stdio "git.novox.be/novox/mesh-sdk/go" "git.novox.be/novox/mesh-sdk/go/forgekey" ) // keeperFor is this module's keeper: go/forgekey's, of kind builder, for account in home on node, whose entry lies // at . of the keys state. func keeperFor(home, node, account string, run forgekey.Runner, state forgekey.KeyPutter) *forgekey.KeyKeeper { return &forgekey.KeyKeeper{Home: home, Node: node, Account: account, Kind: forgekey.KindBuilder, Run: run, State: state, Now: time.Now} } // startKeeper runs the keeper when the runtime launched this process for a node: outside a launch — a build, a // check — there is no state to put the entry in. func startKeeper(ctx context.Context) { node := strings.TrimSpace(os.Getenv("MESH_NODE")) u, err := user.Current() if node == "" || err != nil || u.HomeDir == "" { return } k := keeperFor(u.HomeDir, node, u.Username, forgekey.ExecRunner, keysState{}) k.Keep(ctx, func(f string, a ...any) { fmt.Fprintf(os.Stderr, "[mesh-build-node] "+f+"\n", a...) }) } type keysState struct{} func (keysState) Put(key string, value any) (uint64, error) { return stdio.State("keys").Put(key, value) }