package main import ( "context" "git.novox.be/novox/mesh-sdk/go/buildstep" 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) } tools = append(tools, m.ReadTools()...) tools = append(tools, buildstep.StepEndTool(StepEndTool, m.Node, m.stepScan(), m.Held)) tools = append(tools, m.releaseTool()) 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 }}, ) }