From 8d25d3996e8372129928d39cb4c8b25e8612ebbc Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Fri, 1 Mar 2024 07:44:02 -0600 Subject: [PATCH] better error handling --- Makefile | 20 ++++----- buildPackage.go | 108 +++++++++++++++++++++++++----------------------- main.go | 6 +-- stateWindow.go | 4 +- 4 files changed, 72 insertions(+), 66 deletions(-) diff --git a/Makefile b/Makefile index 15594a2..2f6a655 100644 --- a/Makefile +++ b/Makefile @@ -67,13 +67,13 @@ build-all: go-deb --no-gui --repo golang.org/x/tools/cmd/goimports build-releases: - go-deb --release --no-gui --repo go.wit.com/apps/autotypist - go-deb --release --no-gui --repo go.wit.com/apps/control-panel-dns - go-deb --release --no-gui --repo go.wit.com/apps/control-panel-digitalocean - go-deb --release --no-gui --repo go.wit.com/apps/control-panel-cloudflare - go-deb --release --no-gui --repo go.wit.com/apps/control-panel-vpn - go-deb --release --no-gui --repo go.wit.com/apps/go-gui-toolkits - go-deb --release --no-gui --repo go.wit.com/apps/guireleaser - go-deb --release --no-gui --repo go.wit.com/apps/go-deb - go-deb --release --no-gui --repo go.wit.com/apps/go.wit.com - go-deb --release --no-gui --repo go.wit.com/apps/helloworld + -go-deb --release --no-gui --repo go.wit.com/apps/autotypist + -go-deb --release --no-gui --repo go.wit.com/apps/control-panel-dns + -go-deb --release --no-gui --repo go.wit.com/apps/control-panel-digitalocean + -go-deb --release --no-gui --repo go.wit.com/apps/control-panel-cloudflare + -go-deb --release --no-gui --repo go.wit.com/apps/control-panel-vpn + -go-deb --release --no-gui --repo go.wit.com/apps/go-gui-toolkits + -go-deb --release --no-gui --repo go.wit.com/apps/guireleaser + -go-deb --release --no-gui --repo go.wit.com/apps/go.wit.com + -go-deb --release --no-gui --repo go.wit.com/apps/helloworld + -go-deb --release --no-gui --repo go.wit.com/apps/go-deb diff --git a/buildPackage.go b/buildPackage.go index 814aa30..2f1127f 100644 --- a/buildPackage.go +++ b/buildPackage.go @@ -3,6 +3,7 @@ package main import ( + "errors" "fmt" "os" "path/filepath" @@ -14,7 +15,7 @@ import ( "go.wit.com/log" ) -func (c *controlBox) buildPackage() bool { +func (c *controlBox) buildPackage() error { // TODO: if dirty, set GO111MODULE // also, if last tag != version /* @@ -26,35 +27,14 @@ func (c *controlBox) buildPackage() bool { */ // ldflags := "main.GOTAG=" + repo.LastTag() - if args.Release { - os.Unsetenv("GO111MODULE") - path := c.pathL.String() + "@latest" - cmd := []string{"go", "install", "-v", "-x", path} - if shell.Run(cmd) { - log.Warn("build worked") - } else { - log.Warn("build failed") - return false - } - } else { - - os.Setenv("GO111MODULE", "off") - if shell.Run([]string{"go", "build", "-v", "-x"}) { - log.Warn("build worked") - } else { - log.Warn("build failed") - return false - } - } - filename := c.Package.String() if filename == "" { - log.Warn("build failed") - return false + return errors.New("filename is blank") } - if !shell.Exists(filename) { - log.Warn("build failed") - return false + + homeDir, err := os.UserHomeDir() + if err != nil { + return err } arch := c.Architecture.String() @@ -62,34 +42,70 @@ func (c *controlBox) buildPackage() bool { if version == "" { version = "0.0.0" } - debname := filename + "_" + version + "_" + arch + ".deb" + var fullfilename string + if args.Release { + fullfilename = filepath.Join(homeDir, "go/bin", filename) + } else { + fullfilename = filename + } + shell.Run([]string{"rm", "-f", fullfilename}) + + if shell.Exists(fullfilename) { + // something wrong + return errors.New("binary existed before build") + } + + if args.Release { + os.Unsetenv("GO111MODULE") + path := c.pathL.String() + "@latest" + cmd := []string{"go", "install", "-v", "-x", path} + if shell.Run(cmd) { + log.Warn("go install worked") + } else { + return errors.New("go install") + } + } else { + // set the GO111 build var to true. pass the versions to the compiler manually + os.Setenv("GO111MODULE", "off") + vldflag := "-X main.VERSION=" + version + gldflag := "-X main.GUIVERSION=" + version // todo: git this from the filesystem + if shell.Run([]string{"go", "build", "-v", "-x", "-ldflags", vldflag, gldflag}) { + log.Warn("go build worked") + } else { + return errors.New("go build") + } + } + + if !shell.Exists(fullfilename) { + log.Warn("build failed. filename does not exist", fullfilename) + return errors.New("missing" + fullfilename) + } if shell.Exists("files") { if !shell.Run([]string{"rm", "-rf", "files"}) { log.Warn("rm failed") - return false + return errors.New("rm files/") } } if shell.Exists("files") { log.Warn("rm failed") - return false + return errors.New("rm files/") } if !shell.Mkdir("files/DEBIAN") { - log.Warn("mkdir failed") - return false + return errors.New("mkdir files/DEBIAN") } if !shell.Mkdir("files/usr/bin") { log.Warn("mkdir failed") - return false + return errors.New("mkdir files/usr/bin") } - if !shell.Run([]string{"cp", filename, "files/usr/bin"}) { + if !shell.Run([]string{"cp", fullfilename, "files/usr/bin"}) { log.Warn("cp failed") - return false + return errors.New("cp " + fullfilename) } if !shell.Run([]string{"strip", "files/usr/bin/" + filename}) { log.Warn("strip failed") - return false + return errors.New("strip " + filename) } // put the README in there (if missing, generate it?) @@ -105,24 +121,15 @@ func (c *controlBox) buildPackage() bool { if readme != "" { path := filepath.Join("files/usr/lib/" + filename) if !shell.Mkdir(path) { - log.Warn("mkdir failed") - return false + return errors.New("no files/usr/lib") } if !shell.Run([]string{"cp", readme, path}) { - log.Warn("cp failed") - return false + return errors.New("cp readme") } } if !c.writeFiles() { - log.Warn("write control file failed") - return false - } - - homeDir, err := os.UserHomeDir() - if err != nil { - log.Warn("os.UserHomeDir() failed") - return false + return errors.New("write control file") } // experiment for the toolkit package @@ -139,14 +146,13 @@ func (c *controlBox) buildPackage() bool { shell.Run([]string{"dpkg-deb", "--build", "files", fulldebname}) if shell.Exists(fulldebname) { - log.Warn("build worked") } else { log.Warn("build failed") - return false + return errors.New("dpkg-deb --build worked") } shell.Run([]string{"dpkg-deb", "-I", fulldebname}) shell.Run([]string{"dpkg-deb", "-c", fulldebname}) - return true + return nil } func (c *controlBox) writeFiles() bool { diff --git a/main.go b/main.go index 113ddb2..fdc214e 100644 --- a/main.go +++ b/main.go @@ -6,9 +6,9 @@ import ( "path/filepath" "go.wit.com/gui" - "go.wit.com/lib/gui/shell" "go.wit.com/lib/debugger" "go.wit.com/lib/gadgets" + "go.wit.com/lib/gui/shell" "go.wit.com/log" ) @@ -49,10 +49,10 @@ func main() { if args.NoGui { shell.TestTerminalColor() - if cBox.buildPackage() { + if err := cBox.buildPackage(); err == nil { log.Info("build worked") } else { - log.Warn("build failed") + log.Warn("build failed:", err) os.Exit(-1) } os.Exit(0) diff --git a/stateWindow.go b/stateWindow.go index 0831d43..cd68667 100644 --- a/stateWindow.go +++ b/stateWindow.go @@ -36,10 +36,10 @@ func makebasicWindow() *gadgets.BasicWindow { group1.NewButton("Make .deb", func() { basicWindow.Disable() - if cBox.buildPackage() { + if err := cBox.buildPackage(); err == nil { log.Info("build worked") } else { - log.Warn("build failed") + log.Warn("build failed", err) } basicWindow.Enable() })