ceremonyclient/client/cmd/node/node.go
2025-04-24 12:38:58 -08:00

91 lines
2.5 KiB
Go

package node
import (
"fmt"
"os"
"os/user"
"path/filepath"
"github.com/spf13/cobra"
"github.com/spf13/viper"
configCmd "source.quilibrium.com/quilibrium/monorepo/client/cmd/node/nodeconfig"
proverCmd "source.quilibrium.com/quilibrium/monorepo/client/cmd/node/prover"
"source.quilibrium.com/quilibrium/monorepo/client/utils"
"source.quilibrium.com/quilibrium/monorepo/node/config"
)
var (
OsType string
Arch string
ConfigDirectory string
NodeConfig *config.Config
NodeUser *user.User
ConfigDirs string
NodeConfigToRun string
)
// NodeCmd represents the node command
var NodeCmd = &cobra.Command{
Use: "node",
Short: "Quilibrium node commands",
Long: `Run Quilibrium node commands.`,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
// Store reference to parent's PersistentPreRun to call it first
parent := cmd.Parent()
if parent != nil && parent.PersistentPreRun != nil {
parent.PersistentPreRun(parent, args)
}
// Then run the node-specific initialization
var userLookup *user.User
var err error
userLookup, err = utils.GetCurrentSudoUser()
if err != nil {
fmt.Fprintf(os.Stderr, "Error getting current user: %v\n", err)
os.Exit(1)
}
NodeUser = userLookup
ConfigDirs = filepath.Join(userLookup.HomeDir, ".quilibrium", "configs")
NodeConfig, err = utils.LoadDefaultNodeConfig()
if err != nil {
if err.Error() == utils.ErrConfigNotFoundErrorMessage {
fmt.Println("Config not found, creating default configuration...")
nodeConfig, err := utils.CreateDefaultNodeConfig(utils.DefaultNodeConfigName)
if err != nil {
fmt.Printf("error creating default node config: %s\n", err)
os.Exit(1)
}
NodeConfig = nodeConfig
} else {
fmt.Printf("error loading node config: %s\n", err)
os.Exit(1)
}
}
},
Run: func(cmd *cobra.Command, args []string) {
cmd.Help()
},
}
func init() {
NodeCmd.PersistentFlags().StringVar(&ConfigDirectory, "config", ".config", "config directory (default is .config/)")
viper.BindPFlag("config", NodeCmd.PersistentFlags().Lookup("config"))
// Add subcommands
NodeCmd.AddCommand(configCmd.NodeConfigCmd)
NodeCmd.AddCommand(proverCmd.ProverCmd)
NodeCmd.AddCommand(NodeAutoUpdateCmd)
NodeCmd.AddCommand(NodeCleanCmd)
NodeCmd.AddCommand(NodeInfoCmd)
NodeCmd.AddCommand(NodeInstallCmd)
NodeCmd.AddCommand(NodeServiceCmd)
NodeCmd.AddCommand(NodeUpdateCmd)
NodeCmd.AddCommand(NodeUninstallCmd)
NodeCmd.AddCommand(NodeLinkCmd)
OsType = utils.OsType
Arch = utils.Arch
}