summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.go82
-rw-r--r--config.go8
-rw-r--r--init.go1
-rw-r--r--repoNew.go4
4 files changed, 93 insertions, 2 deletions
diff --git a/build.go b/build.go
new file mode 100644
index 0000000..7e046e5
--- /dev/null
+++ b/build.go
@@ -0,0 +1,82 @@
+package forgepb
+
+// for golang repos, this is an attempt to build the package
+// there might be some 'standard' ways to implement a build
+// that make sense.
+
+// Additions to 'go build' that are attempted here:
+//
+// * detect packages that are plugins
+// * autogen packages that have .proto protobuf files
+// * define some 'standard' ldflags
+//
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "time"
+
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+)
+
+func (f *Forge) Build(repo *gitpb.Repo, userFlags []string) error {
+ // always assume all sources have been downloaded
+ // todo: detect when in ~/go/src vs go.work mode
+ os.Setenv("GO111MODULE", "off")
+
+ // get the version
+ version := repo.GetCurrentBranchVersion()
+
+ loop := repo.Tags.SortByRefname()
+ for loop.Scan() {
+ t := loop.Next()
+ log.Info("Build() tag:", t.Refname)
+ }
+
+ if repo.GoDeps == nil {
+ repo.RedoGoMod()
+ }
+ if repo.GoDeps.Len() == 0 {
+ log.Info("redo go.mod", repo.GetGoPath())
+ repo.RedoGoMod()
+ f.Repos.ConfigSave()
+ }
+ loop1 := repo.GoDeps.SortByGoPath()
+ for loop1.Scan() {
+ t := loop1.Next()
+ log.Info("Build() dep:", t.GetGoPath(), t.GetVersion())
+ }
+ log.Info("Build() dep len:", repo.GoDeps.Len())
+ os.Exit(-1)
+
+ if repo.CheckDirty() {
+ version = version + "-dirty"
+ }
+ cmd := []string{"go", "build", "-v"}
+
+ // set standard ldflag options
+ now := time.Now()
+ datestamp := now.UTC().Format("2006/01/02_1504_UTC")
+ log.Info("datestamp =", datestamp)
+ // add some standard golang flags
+ ldflags := "-X main.VERSION=" + version + " "
+ ldflags += "-X main.BUILDTIME=" + datestamp + " "
+ ldflags += "-X main.GUIVERSION=" + version + "" // todo: git this from the filesystem
+ cmd = append(cmd, "-ldflags", ldflags)
+
+ // add any flags from the command line
+ // this might not actually work
+ // todo: test this
+ for _, flag := range userFlags {
+ cmd = append(cmd, "-ldflags", "-X "+flag)
+ }
+
+ if r := repo.Run(cmd); r.Error == nil {
+ log.Warn("go build worked")
+ return nil
+ } else {
+ return errors.New("go build failed: " + fmt.Sprint(r.Error))
+ }
+}
diff --git a/config.go b/config.go
index 04e1b05..80e3e83 100644
--- a/config.go
+++ b/config.go
@@ -13,6 +13,8 @@ import (
// write to ~/.config/forge/ unless ENV{FORGE_HOME} is set
func (f *Forge) ConfigSave() error {
+ // f.Config.Lock()
+ // defer f.Config.UnLock()
if os.Getenv("FORGE_HOME") == "" {
homeDir, _ := os.UserHomeDir()
fullpath := filepath.Join(homeDir, ".config/forge")
@@ -27,7 +29,7 @@ func (f *Forge) ConfigSave() error {
log.Info("proto.Marshal() failed len", len(data), err)
return err
}
- log.Info("proto.Marshal() worked len", len(data))
+ log.Info("forgepb.ConfigSave() proto.Marshal() worked len", len(data))
configWrite("forge.pb", data)
s := f.Config.FormatTEXT()
@@ -35,6 +37,10 @@ func (f *Forge) ConfigSave() error {
s = f.Config.FormatJSON()
configWrite("forge.json", []byte(s))
+
+ if f.Repos != nil {
+ f.Repos.ConfigSave()
+ }
return nil
}
diff --git a/init.go b/init.go
index 120d57a..b8b8498 100644
--- a/init.go
+++ b/init.go
@@ -37,6 +37,7 @@ func Init() *Forge {
}
f.Repos = new(gitpb.Repos)
+ f.Repos.ConfigLoad()
f.Machine = new(zoopb.Machine)
if err := f.Machine.ConfigLoad(); err != nil {
diff --git a/repoNew.go b/repoNew.go
index 71d7776..605c74b 100644
--- a/repoNew.go
+++ b/repoNew.go
@@ -40,6 +40,8 @@ func (f *Forge) NewGoPath(gopath string) (*gitpb.Repo, error) {
} else {
newr.SetUserBranchName(uname + "FIXME")
}
+ f.Repos.ConfigSave()
+ panic("forgepb got here")
- return newr, err
+ // return newr, err
}