// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main // An app to submit patches for the 30 GO GUI repos import ( "embed" "go.wit.com/lib/protobuf/argvpb" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" ) // at build time, this can be used to store GUI plugins with matching GO deps // //go:embed resources/* var resources embed.FS func doInit() *forgepb.Forge { // the current forge init process forge, err := forgepb.Init() me.forge = forge if err == nil { // do the new user check anyway. should exit right away with no error s, err := doNewUser() if err != nil { // fail if new user check fails me.argv.BadExit(s, err) } return forge } // Probably a new user s, err := doNewUser() if err != nil { me.argv.BadExit(s, err) } me.argv.GoodExit("try running: 'forge rebuild forge' to test out that forge is working on your machine") return forge } func doCoreChecks() { me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes if me.forge.Config.Mode != forgepb.ForgeMode_NORMAL { me.forge.Config.DumpPB() } if me.forge.Config.Mode == forgepb.ForgeMode_DEVEL { dumpDebug() } // if you are in "normal" mode, always run normal every time to catch accidental errors // for example, if you accidentally changed branches from your user branch if me.forge.Config.Mode == forgepb.ForgeMode_NORMAL { // show what is still normal and what is not doNormalStatus() } } func main() { me = new(mainType) me.argv = argvpb.Autocomplete(&argv) // adds shell auto complete to go-args me.forge = doInit() // init's forge (and checks for new users) // put things to do every time forge runs here doCoreChecks() if me.argv.Cmd == "" { // no command line arguments were given // do the default behavior and exit s, err := doDefaultBehavior() if err != nil { me.argv.BadExit(s, err) } me.argv.GoodExit(s) } log.Info("Starting forge with subcommand:", me.argv.Cmd) var s string var err error s, err = doSubcommand() // safe exits back to your shell (with timing and toolkit close) if err != nil { me.argv.BadExit(s, err) } me.argv.GoodExit(s) }