diff options
| author | Jeff Carr <[email protected]> | 2025-09-11 19:08:15 -0500 | 
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-11 19:08:15 -0500 | 
| commit | 475e72018e18757026e50c1f80d71b630461b7ec (patch) | |
| tree | 8cbc6bebd3fdebca54bbd9b46ecc5ef59c093a0c | |
| parent | aedb5a3bef4eb587e56744837f528836986e9f92 (diff) | |
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | argv.go | 1 | ||||
| -rw-r--r-- | build.go | 100 | ||||
| -rw-r--r-- | control.read.go (renamed from readControlFile.go) | 0 | ||||
| -rw-r--r-- | control.write.go | 106 | ||||
| -rw-r--r-- | main.go | 7 | 
6 files changed, 117 insertions, 99 deletions
@@ -24,7 +24,7 @@ build: goimports vet  	GO111MODULE="off" go build -v \  		    -ldflags "-X main.VERSION=${VERSION} -X main.DATE=${DATE} -X gui.GUIVERSION=${VERSION}" -install: +install: goimports  	GO111MODULE="off" go install -v \  		    -ldflags "-X main.VERSION=${VERSION} -X main.DATE=${DATE} -X gui.GUIVERSION=${VERSION}" @@ -15,6 +15,7 @@ type args struct {  	Commit    *EmptyCmd `arg:"subcommand:commit"        help:"'git commit' but errors out if on wrong branch"`  	Show      *EmptyCmd `arg:"subcommand:show"          help:"show what would be done"`  	Gui       *EmptyCmd `arg:"subcommand:gui"           help:"open the gui"` +	Dump      *EmptyCmd `arg:"subcommand:dump"          help:"dump out the future control file"`  	Ldflags   []string  `arg:"--ldflags"                help:"flags to pass to go build"`  	OutDir    string    `arg:"--dir"                    help:"write .deb file into this directory"`  	Release   bool      `arg:"--release"                help:"build a release from the last git tag"` @@ -5,11 +5,8 @@ import (  	"fmt"  	"os"  	"path/filepath" -	"strconv" -	"strings"  	"time" -	"github.com/go-cmd/cmd"  	"go.wit.com/lib/gui/shell"  	"go.wit.com/lib/protobuf/gitpb"  	"go.wit.com/log" @@ -167,14 +164,14 @@ func buildPackage(repo *gitpb.Repo) (bool, error) {  		// probably deprecate this  		log.Info("REPO GO_DEB_CUSTOM=true means binary is not copied")  	} else { -		fname := repo.Control["Package"] +		_, fname := filepath.Split(repo.GetFullPath())  		cmd := []string{"cp", fname, "files/usr/bin"}  		log.Info("REPO FILENAME cp", cmd)  		if err := repo.RunVerbose(cmd); err != nil {  			log.Warn("cp failed")  			return false, err  		} -		cmd = []string{"strip", "files/usr/bin/" + filename} +		cmd = []string{"strip", "files/usr/bin/" + fname}  		if err := repo.RunVerbose(cmd); err != nil {  			log.Warn("strip failed")  			return false, err @@ -245,96 +242,3 @@ func buildPackage(repo *gitpb.Repo) (bool, error) {  	}  	return true, nil  } - -func writeDebianControlFile(repo *gitpb.Repo) bool { -	filename := "files/DEBIAN/control" -	cf, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) -	if err != nil { -		log.Info("open control file failed", err) -		return false -	} -	fmt.Fprintln(cf, "Package:", repo.Control["Package"]) // c.Package.String()) -	fmt.Fprintln(cf, "Source:", repo.Control["Source"])   // c.Source.String()) -	fmt.Fprintln(cf, "Version:", repo.Control["Version"]) -	if repo.Control["Architecture"] == "" { -		repo.Control["Architecture"] = "amd64" -	} -	fmt.Fprintln(cf, "Architecture:", repo.Control["Architecture"]) // c.Architecture.String()) - -	writeControlVar(cf, repo, "Depends") -	writeControlVar(cf, repo, "Build-Depends") -	writeControlVar(cf, repo, "Maintainer") -	writeControlVar(cf, repo, "Packager") -	writeControlVar(cf, repo, "GoPath") -	writeControlVar(cf, repo, "URL") -	writeControlVar(cf, repo, "Conflicts") - -	stamp := time.Now().UTC().Format("2006/01/02 15:04:05 UTC") -	// update to now now despite what the GUI is showing -	fmt.Fprintln(cf, "Package-Build-Date:", stamp) -	fmt.Fprintln(cf, "Git-Tag-Date:", "todo: get from repo") - -	desc, _ := repo.Control["Description"] // c.Description.String() -	parts := strings.Split(desc, "\n") -	fmt.Fprintln(cf, "Description:", strings.Join(parts, "\n ")) - -	log.Info("file written as:", filename) -	return true -} - -func writeControlVar(f *os.File, repo *gitpb.Repo, varname string) { -	val, _ := repo.Control[varname] -	if val == "" { -		return -	} -	fmt.Fprintln(f, varname+":", val) -} - -// try to guess or figure out the config file values -// if there is not a control file -func computeControlValues(repo *gitpb.Repo) bool { -	if repo.Control["Package"] == "" { -		// get the package name from the repo name -		path := repo.Control["pathL"] // c.pathL.String() -		parts := strings.Split(path, "/") -		name := parts[len(parts)-1] -		repo.Control["Package"] = name -	} -	if repo.Control["Source"] == "" { -		repo.Control["Source"] = repo.Control["Package"] -	} -	if repo.Control["Build-Depends"] == "" { -		repo.Control["Build-Depends"] = repo.Control["golang"] -	} -	if repo.Control["Recommends"] == "" { -		repo.Control["Recommends"] = repo.Control["go-gui-toolkits"] -	} -	if repo.Control["Maintainer"] == "" { -		repo.Control["Maintainer"] = "todo: get from ENV" -	} -	if repo.Control["Description"] == "" { -		repo.Control["Description"] = "todo: put URL here" -	} -	return true -} - -// stamp := time.Now().UTC().Format("2006/01/02 15:04:05 UTC") - -func getDateStamp(tag string) string { -	var r cmd.Status -	r = me.repo.Run([]string{"git", "log", "-1", "--format=%at", tag}) - -	out := strings.Join(r.Stdout, "\n") -	out = strings.TrimSpace(out) - -	// Convert the string to an integer -	gitTagTimestampInt, err := strconv.ParseInt(out, 10, 64) -	if err != nil { -		fmt.Println("Error converting timestamp:", err) -		return "git tag " + tag + " unknown" -	} - -	// Parse the Unix timestamp into a time.Time object -	gitTagDate := time.Unix(gitTagTimestampInt, 0) -	return gitTagDate.UTC().Format("2006-01-02_15:04:05_UTC") // close to RFC3339 -} diff --git a/readControlFile.go b/control.read.go index d6a4c0d..d6a4c0d 100644 --- a/readControlFile.go +++ b/control.read.go diff --git a/control.write.go b/control.write.go new file mode 100644 index 0000000..b2c31ba --- /dev/null +++ b/control.write.go @@ -0,0 +1,106 @@ +package main + +import ( +	"fmt" +	"os" +	"strconv" +	"strings" +	"time" + +	"github.com/go-cmd/cmd" +	"go.wit.com/lib/protobuf/gitpb" +	"go.wit.com/log" +) + +func writeDebianControlFile(repo *gitpb.Repo) bool { +	filename := "files/DEBIAN/control" +	cf, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) +	if err != nil { +		log.Info("open control file failed", err) +		return false +	} +	fmt.Fprintln(cf, "Package:", repo.Control["Package"]) // c.Package.String()) +	fmt.Fprintln(cf, "Source:", repo.Control["Source"])   // c.Source.String()) +	fmt.Fprintln(cf, "Version:", repo.Control["Version"]) +	if repo.Control["Architecture"] == "" { +		repo.Control["Architecture"] = "amd64" +	} +	fmt.Fprintln(cf, "Architecture:", repo.Control["Architecture"]) // c.Architecture.String()) + +	writeControlVar(cf, repo, "Depends") +	writeControlVar(cf, repo, "Build-Depends") +	writeControlVar(cf, repo, "Maintainer") +	writeControlVar(cf, repo, "Packager") +	writeControlVar(cf, repo, "GoPath") +	writeControlVar(cf, repo, "URL") +	writeControlVar(cf, repo, "Conflicts") + +	stamp := time.Now().UTC().Format("2006/01/02 15:04:05 UTC") +	// update to now now despite what the GUI is showing +	fmt.Fprintln(cf, "Package-Build-Date:", stamp) +	fmt.Fprintln(cf, "Git-Tag-Date:", "todo: get from repo") + +	desc, _ := repo.Control["Description"] // c.Description.String() +	parts := strings.Split(desc, "\n") +	fmt.Fprintln(cf, "Description:", strings.Join(parts, "\n ")) + +	log.Info("file written as:", filename) +	return true +} + +func writeControlVar(f *os.File, repo *gitpb.Repo, varname string) { +	val, _ := repo.Control[varname] +	if val == "" { +		return +	} +	fmt.Fprintln(f, varname+":", val) +} + +// try to guess or figure out the config file values +// if there is not a control file +func computeControlValues(repo *gitpb.Repo) bool { +	if repo.Control["Package"] == "" { +		// get the package name from the repo name +		path := repo.Control["pathL"] // c.pathL.String() +		parts := strings.Split(path, "/") +		name := parts[len(parts)-1] +		repo.Control["Package"] = name +	} +	if repo.Control["Source"] == "" { +		repo.Control["Source"] = repo.Control["Package"] +	} +	if repo.Control["Build-Depends"] == "" { +		repo.Control["Build-Depends"] = repo.Control["golang"] +	} +	if repo.Control["Recommends"] == "" { +		repo.Control["Recommends"] = repo.Control["go-gui-toolkits"] +	} +	if repo.Control["Maintainer"] == "" { +		repo.Control["Maintainer"] = "todo: get from ENV" +	} +	if repo.Control["Description"] == "" { +		repo.Control["Description"] = "todo: put URL here" +	} +	return true +} + +// stamp := time.Now().UTC().Format("2006/01/02 15:04:05 UTC") + +func getDateStamp(tag string) string { +	var r cmd.Status +	r = me.repo.Run([]string{"git", "log", "-1", "--format=%at", tag}) + +	out := strings.Join(r.Stdout, "\n") +	out = strings.TrimSpace(out) + +	// Convert the string to an integer +	gitTagTimestampInt, err := strconv.ParseInt(out, 10, 64) +	if err != nil { +		fmt.Println("Error converting timestamp:", err) +		return "git tag " + tag + " unknown" +	} + +	// Parse the Unix timestamp into a time.Time object +	gitTagDate := time.Unix(gitTagTimestampInt, 0) +	return gitTagDate.UTC().Format("2006-01-02_15:04:05_UTC") // close to RFC3339 +} @@ -66,6 +66,13 @@ func main() {  	}  	computeControlValues(me.repo) +	if argv.Dump != nil { +		for v := range me.repo.Control { +			log.Infof("CONTROL: %s: %s\n", v, me.repo.Control[v]) +		} +		okExit("") +	} +  	if argv.Gui != nil {  		// only load teh toolkit if you get this far  		me.myGui.Start() // loads the GUI toolkit  | 
