53 lines
1.9 KiB
Go
53 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
|
|
stdio "git.novox.be/novox/mesh-sdk/go"
|
|
)
|
|
|
|
// The tools this module serves. A tool is named as the module is: build_node_ and its verb (a tool name has no dot).
|
|
const (
|
|
StatusTool = "build_node_status"
|
|
HealthTool = "build_node_health"
|
|
)
|
|
|
|
// StepTool is one step tool of the module: fetch, test or build. Long is a step that answers at once and
|
|
// ends on its key (ADR 0469 §2); the others answer in their call. Both run behind the toolchain guard.
|
|
type StepTool struct {
|
|
Name string
|
|
Description string
|
|
Input map[string]any
|
|
Long bool
|
|
Run func(ctx context.Context, args map[string]any) (any, error)
|
|
}
|
|
|
|
// StepTools are the module's step tools. Each step's issue adds its own.
|
|
func (m *Module) StepTools() []StepTool {
|
|
return []StepTool{m.fetchTool(), m.testTool(), m.buildTool()}
|
|
}
|
|
|
|
// Tools is every tool the module serves: its step tools behind the guard, its status and its health.
|
|
func (m *Module) Tools(steps []StepTool) []stdio.Tool {
|
|
tools := []stdio.Tool{}
|
|
for _, s := range steps {
|
|
t := stdio.Tool{Name: s.Name, Description: s.Description, Input: s.Input}
|
|
if s.Long {
|
|
t.Run = m.Long(s.Name, s.Run)
|
|
} else {
|
|
t.Run = m.Short(s.Run)
|
|
}
|
|
tools = append(tools, t)
|
|
}
|
|
return append(tools,
|
|
stdio.Tool{Name: StatusTool,
|
|
Description: "What the Node build module is on this machine: the Node version its recipe builds with and the one installed, " +
|
|
"the recipe version, the toolchain directory and whether it is installed, and why it refuses to build if it does. Read-only.",
|
|
Run: func(map[string]any) (any, error) { return m.Status(m.Ctx), nil }},
|
|
stdio.Tool{Name: HealthTool,
|
|
Description: "How the Node build module is: unhealthy while the Node installed on this machine is not the version its " +
|
|
"recipe builds with, saying both versions; healthy otherwise. Read-only.",
|
|
Run: func(map[string]any) (any, error) { return m.Health(m.Ctx), nil }},
|
|
)
|
|
}
|