orchard/internal/command/root.go

89 lines
2.6 KiB
Go

package command
import (
"github.com/cirruslabs/orchard/internal/command/context"
"github.com/cirruslabs/orchard/internal/command/controller"
"github.com/cirruslabs/orchard/internal/command/create"
deletepkg "github.com/cirruslabs/orchard/internal/command/deletecmd"
"github.com/cirruslabs/orchard/internal/command/dev"
"github.com/cirruslabs/orchard/internal/command/get"
"github.com/cirruslabs/orchard/internal/command/list"
"github.com/cirruslabs/orchard/internal/command/localnetworkhelper"
"github.com/cirruslabs/orchard/internal/command/logs"
"github.com/cirruslabs/orchard/internal/command/pause"
"github.com/cirruslabs/orchard/internal/command/portforward"
"github.com/cirruslabs/orchard/internal/command/resume"
"github.com/cirruslabs/orchard/internal/command/set"
"github.com/cirruslabs/orchard/internal/command/ssh"
"github.com/cirruslabs/orchard/internal/command/vnc"
"github.com/cirruslabs/orchard/internal/command/worker"
"github.com/cirruslabs/orchard/internal/opentelemetry"
"github.com/cirruslabs/orchard/internal/version"
"github.com/spf13/cobra"
)
func NewRootCmd() *cobra.Command {
command := &cobra.Command{
Use: "orchard",
SilenceUsage: true,
SilenceErrors: true,
Version: version.FullVersion,
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
// Configure OpenTelemetry
if err := opentelemetry.Configure(cmd.Context()); err != nil {
return err
}
return nil
},
}
if localNetworkHelperCommand := localnetworkhelper.NewCommand(); localNetworkHelperCommand != nil {
command.AddCommand(localNetworkHelperCommand)
}
addGroupedCommands(command, "Working With Resources:",
create.NewCommand(),
deletepkg.NewCommand(),
get.NewCommand(),
list.NewCommand(),
logs.NewCommand(),
pause.NewCommand(),
portforward.NewCommand(),
resume.NewCommand(),
set.NewCommand(),
ssh.NewCommand(),
vnc.NewCommand(),
)
administrativeCommands := []*cobra.Command{
context.NewCommand(),
controller.NewCommand(),
}
if devCommand := dev.NewCommand(); devCommand != nil {
administrativeCommands = append(administrativeCommands, devCommand)
}
if workerCommand := worker.NewCommand(); workerCommand != nil {
administrativeCommands = append(administrativeCommands, workerCommand)
}
addGroupedCommands(command, "Administrative Tasks:", administrativeCommands...)
return command
}
func addGroupedCommands(parent *cobra.Command, title string, commands ...*cobra.Command) {
group := &cobra.Group{
ID: title,
Title: title,
}
parent.AddGroup(group)
for _, command := range commands {
command.GroupID = group.ID
parent.AddCommand(command)
}
}