diff options
| author | Jeff Carr <[email protected]> | 2025-10-03 13:47:01 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-03 13:47:01 -0500 |
| commit | e4b679003ce0847dd65254a5e0a0b3239fd0d566 (patch) | |
| tree | 6d5ce5b6db6349ad5022656732d044137a624339 /doBuild.go | |
| parent | 888ef5304907d0e8a98472a31728b5398972b647 (diff) | |
mv and merge
Diffstat (limited to 'doBuild.go')
| -rw-r--r-- | doBuild.go | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/doBuild.go b/doBuild.go new file mode 100644 index 0000000..28e1189 --- /dev/null +++ b/doBuild.go @@ -0,0 +1,188 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package main + +import ( + "fmt" + "os" + "path/filepath" + + "go.wit.com/lib/gui/shell" + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +func doBuild() error { + if argv.Build.Install != nil { + if err := doInstall(); err != nil { + log.Info("doInstall() failed", err) + badExit(err) + } + okExit("EVERYTHING BUILT!") + } + + if argv.Build.MacBuild != nil { + log.Info("todo: add mac builds") + return nil + } + + if argv.Build.Debian != nil { + doDebian() + okExit("") + } + + return nil +} + +func doInstallRepo(check *gitpb.Repo) error { + repotype := check.GetRepoType() + if repotype == "binary" || repotype == "plugin" { + // we only want to process things that can be compiled with 'go build' + } else { + // log.Info("skipping repo", check.GetGoPath(), repotype) + return nil + } + + if me.forge.Config.IsReadOnly(check.GetGoPath()) { + // ignore read only stuff + return nil + } + + if argv.Verbose || argv.Force { + verbose := []string{"-v", "-x"} + if err := me.forge.Install(check, verbose); err != nil { + log.Warn("INSTALL FAILED", check.GetGoPath(), err) + failed[check] = fmt.Sprintf("%s %s %v", "go install", check.GetGoPath(), err) + return err + } + } else { + if err := me.forge.Install(check, nil); err != nil { + log.Warn("INSTALL FAILED", check.GetGoPath(), err) + failed[check] = fmt.Sprintf("%s %s %v", "go install", check.GetGoPath(), err) + return err + } + } + return nil +} + +func doInstallScan() { + initForge() // make sure forge is init'd here + + all := me.forge.Repos.SortByFullPath() + for all.Scan() { + check := all.Next() + + repotype := check.GetRepoType() + if repotype == "binary" || repotype == "plugin" { + // we only want to process things that can be compiled with 'go build' + } else { + // log.Info("skipping repo", check.GetGoPath(), repotype) + continue + } + + if me.forge.Config.IsReadOnly(check.GetGoPath()) { + // ignore read only stuff + continue + } + + // var cmd []string + var start string + var end string + + // add te repotype + end += check.GetRepoType() + + manufactured := check.GetCurrentVersion() + ver := trimNonNumericFromStart(manufactured) + name := me.forge.Config.DebName(check.GetGoPath()) + var realver string + if installedPackage := me.machine.FindInstalledByName(name); installedPackage != nil { + realver = installedPackage.Version + } + if actualp := me.machine.FindByVersion(name, ver); actualp != nil { + end += " (version match) " + actualp.Version + " " + ver + " " + state[check] = "on mirrors" + } else { + if realver != "" { + end += fmt.Sprintf(" (version miss) %s vs %s ", realver, ver) + } + // end += "" + ver + " " + } + if me.machine.IsInstalled(name) { + if actualp := me.machine.FindInstalledByName(name); actualp != nil { + if ver != actualp.Version { + end += "(installed " + actualp.Version + ") " + } else { + end += "(installed ok) " + } + } else { + end += "(installed) " + } + } + + debname := name + "_" + ver + "_amd64.deb" + debnames[check] = debname + outdir := getOutdir(check) + _, err := os.Stat(filepath.Join(outdir, debname)) + if err == nil { + // log.Info("exists", filepath.Join(outdir, debname)) + state[check] = "in incoming" + } else { + // log.Info(debname, "does not exist") + } + + if state[check] == "" { + state[check] = "need to build" + } + start = fmt.Sprintf("%-15s %-20s %-50s", state[check], ver, debname) + + if state[check] == "need to build" { + end += " (will build) " + } + + log.Info(start, end) + if name == "" { + // err := fmt.Sprintf("name is blank error %+v", repo) + log.Warn("name is blank error", check.GetGoPath()) + } + } +} + +func doInstall() error { + initForge() + + found := gitpb.NewRepos() + for check := range me.forge.Repos.IterAll() { + if me.forge.Config.IsReadOnly(check.GetGoPath()) { + continue + } + + if !check.IsBinary() { + continue + } + + if check.IsGoPlugin() { + continue + } + found.Append(check) + } + me.forge.PrintForgedTable(found) + + if argv.DryRun { + doInstallScan() + okExit("") + } + + me.forge.ConfigRill(16, 16) + stats := me.forge.RunOnRepos(found, doInstallRepo) + for s, stat := range stats { + if stat.Err == nil { + continue + } + dur := stat.End.Sub(stat.Start) + log.Info("CRAP. INSTALL FAILED", shell.FormatDuration(dur), s, stat.Err) + badExit(stat.Err) + } + return nil +} |
