package main import ( "path/filepath" "strings" "github.com/go-cmd/cmd" "go.wit.com/lib/gui/shell" "go.wit.com/log" ) // attempt to rebuild this app // This should work from a blank slate // TODO: make sure this works in a empty directory with a go-work file func attemptAutoRebuild() bool { gosrc := me.goSrcPwd.String() if r, ok := quickCmd(gosrc, []string{"go-clone", "--recursive", "go.wit.com/apps/autotypist"}); !ok { return buildDied(r) } if r, ok := quickCmd(gosrc, []string{"go-clone", "--recursive", "go.wit.com/toolkits/debian"}); !ok { return buildDied(r) } if r, ok := quickCmd(gosrc, []string{"go-clone", "--recursive", "go.wit.com/toolkits/tree"}); !ok { return buildDied(r) } if r, ok := quickCmd(gosrc, []string{"go-clone", "--recursive", "go.wit.com/toolkits/nocui"}); !ok { return buildDied(r) } if r, ok := quickCmd(gosrc, []string{"go-clone", "--recursive", "go.wit.com/toolkits/gocui"}); !ok { return buildDied(r) } if r, ok := quickCmd(gosrc, []string{"go-clone", "--recursive", "go.wit.com/toolkits/andlabs"}); !ok { return buildDied(r) } if r, ok := quickCmd(filepath.Join(gosrc, "go.wit.com/toolkits/nocui/"), []string{"make"}); !ok { return buildDied(r) } if r, ok := quickCmd(filepath.Join(gosrc, "go.wit.com/toolkits/gocui/"), []string{"make"}); !ok { return buildDied(r) } if r, ok := quickCmd(filepath.Join(gosrc, "go.wit.com/toolkits/andlabs/"), []string{"make"}); !ok { return buildDied(r) } // build the protobuf files // TODO: verify the right protoc-gen-go exists if !shell.Exists("/usr/bin/protoc-gen-go") { log.Warn("missing /usr/bin/protc-gen-go. apt install protoc-gen-go") return false } quickCmd(filepath.Join(gosrc, "go.wit.com/lib/protobuf/forgepb/"), []string{"make"}) quickCmd(filepath.Join(gosrc, "go.wit.com/lib/protobuf/virtbuf/"), []string{"make"}) quickCmd(filepath.Join(gosrc, "go.wit.com/lib/protobuf/zoopb/"), []string{"make"}) quickCmd(filepath.Join(gosrc, "go.wit.com/apps/autotypist/"), []string{"make", "build"}) return true } // only errors on bad errors func quickCmd(fullpath string, cmd []string) (*cmd.Status, bool) { if me.autoDryRun.Checked() { log.Warn("RUN --dry-run", fullpath, cmd) return nil, true } else { log.Warn("RUN:", fullpath, cmd) } r := shell.PathRun(fullpath, cmd) output := strings.TrimSpace(strings.Join(r.Stdout, "\n")) if r.Error != nil { log.Warn("cmd =", cmd) log.Warn("err =", r.Error) log.Warn("b =", r.Exit) log.Warn("output =", output) return &r, false } else if r.Exit != 0 { log.Warn("b =", r.Exit) log.Warn("output =", output) return &r, true } log.Warn("output = ", output) return &r, true } func buildDied(r *cmd.Status) bool { return false }