// Copyright 2024 WIT.COM Inc Licensed GPL 3.0 package main import ( "embed" "net/url" "os" "path/filepath" "github.com/google/uuid" "go.wit.com/dev/alexflint/arg" "go.wit.com/lib/gui/prep" "go.wit.com/lib/protobuf/virtpb" "go.wit.com/log" ) // sent via -ldflags var VERSION string var BUILDTIME string var ARGNAME string = "virtigo" //go:embed resources/* var resources embed.FS func main() { me = new(virtigoT) prep.Bash(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv) me.myGui = prep.Gui() // prepares the GUI package for go-args me.pp = arg.MustParse(&argv) if me.pp == nil { me.pp.WriteHelp(os.Stdout) os.Exit(0) } if os.Getenv("VIRTIGO_HOME") == "" { homeDir, _ := os.UserHomeDir() fullpath := filepath.Join(homeDir, ".config/virtigo") os.Setenv("VIRTIGO_HOME", fullpath) } me.clusters = virtpb.NewClusters() if argv.List != nil { err := me.clusters.ConfigLoad() if err != nil { badExit(err) } doList() okExit("virtigo list") } if argv.Droplet != nil { exit(doDroplet()) } me.myGui.Start() // loads the GUI toolkit if argv.Admin { err := me.clusters.ConfigLoad() if err != nil { badExit(err) } doAdminGui() okExit("admin close") } if argv.Server != "" { log.Info("start admin interface") admin := new(adminT) var err error admin.url, err = url.Parse(argv.Server) if err != nil { badExit(err) } err = me.clusters.ConfigLoad() if err != nil { clusters := virtpb.NewClusters() c := new(virtpb.Cluster) c.Uuid = uuid.New().String() c.URL = append(c.URL, argv.Server) clusters.Append(c) virtpb.ConfigWriteTEXT(clusters, "cluster.text") badExit(err) } admin.doAdminGui() okExit("admin close") } if argv.Daemon { if err := doDaemon(); err != nil { badExit(err) } okExit("") } doGui() // start making our forge GUI startHTTP() // sit here forever }