go/pkg/cli/commands.go

36 lines
970 B
Go
Raw Permalink Normal View History

// Package cli provides the CLI runtime and utilities.
package cli
import (
"context"
"forge.lthn.ai/core/go/pkg/framework"
"github.com/spf13/cobra"
)
// WithCommands creates a framework Option that registers a command group.
// The register function receives the root command during service startup,
// allowing commands to participate in the Core lifecycle.
//
// cli.Main(
// cli.WithCommands("config", config.AddConfigCommands),
// cli.WithCommands("doctor", doctor.AddDoctorCommands),
// )
func WithCommands(name string, register func(root *Command)) framework.Option {
return framework.WithName("cmd."+name, func(c *framework.Core) (any, error) {
return &commandService{core: c, register: register}, nil
})
}
type commandService struct {
core *framework.Core
register func(root *Command)
}
func (s *commandService) OnStartup(_ context.Context) error {
if root, ok := s.core.App.(*cobra.Command); ok {
s.register(root)
}
return nil
}