Compare commits
3 Commits
Author | SHA1 | Date |
---|---|---|
|
6d670cc64f | |
|
475e72018e | |
|
aedb5a3bef |
2
Makefile
2
Makefile
|
@ -24,7 +24,7 @@ build: goimports vet
|
||||||
GO111MODULE="off" go build -v \
|
GO111MODULE="off" go build -v \
|
||||||
-ldflags "-X main.VERSION=${VERSION} -X main.DATE=${DATE} -X gui.GUIVERSION=${VERSION}"
|
-ldflags "-X main.VERSION=${VERSION} -X main.DATE=${DATE} -X gui.GUIVERSION=${VERSION}"
|
||||||
|
|
||||||
install:
|
install: goimports
|
||||||
GO111MODULE="off" go install -v \
|
GO111MODULE="off" go install -v \
|
||||||
-ldflags "-X main.VERSION=${VERSION} -X main.DATE=${DATE} -X gui.GUIVERSION=${VERSION}"
|
-ldflags "-X main.VERSION=${VERSION} -X main.DATE=${DATE} -X gui.GUIVERSION=${VERSION}"
|
||||||
|
|
||||||
|
|
1
argv.go
1
argv.go
|
@ -15,6 +15,7 @@ type args struct {
|
||||||
Commit *EmptyCmd `arg:"subcommand:commit" help:"'git commit' but errors out if on wrong branch"`
|
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"`
|
Show *EmptyCmd `arg:"subcommand:show" help:"show what would be done"`
|
||||||
Gui *EmptyCmd `arg:"subcommand:gui" help:"open the gui"`
|
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"`
|
Ldflags []string `arg:"--ldflags" help:"flags to pass to go build"`
|
||||||
OutDir string `arg:"--dir" help:"write .deb file into this directory"`
|
OutDir string `arg:"--dir" help:"write .deb file into this directory"`
|
||||||
Release bool `arg:"--release" help:"build a release from the last git tag"`
|
Release bool `arg:"--release" help:"build a release from the last git tag"`
|
||||||
|
|
99
build.go
99
build.go
|
@ -5,11 +5,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-cmd/cmd"
|
|
||||||
"go.wit.com/lib/gui/shell"
|
"go.wit.com/lib/gui/shell"
|
||||||
"go.wit.com/lib/protobuf/gitpb"
|
"go.wit.com/lib/protobuf/gitpb"
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
|
@ -167,14 +164,14 @@ func buildPackage(repo *gitpb.Repo) (bool, error) {
|
||||||
// probably deprecate this
|
// probably deprecate this
|
||||||
log.Info("REPO GO_DEB_CUSTOM=true means binary is not copied")
|
log.Info("REPO GO_DEB_CUSTOM=true means binary is not copied")
|
||||||
} else {
|
} else {
|
||||||
fname := repo.Control["Package"]
|
_, fname := filepath.Split(repo.GetFullPath())
|
||||||
cmd := []string{"cp", fname, "files/usr/bin"}
|
cmd := []string{"cp", fname, "files/usr/bin"}
|
||||||
log.Info("REPO FILENAME cp", cmd)
|
log.Info("REPO FILENAME cp", cmd)
|
||||||
if err := repo.RunVerbose(cmd); err != nil {
|
if err := repo.RunVerbose(cmd); err != nil {
|
||||||
log.Warn("cp failed")
|
log.Warn("cp failed")
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
cmd = []string{"strip", "files/usr/bin/" + filename}
|
cmd = []string{"strip", "files/usr/bin/" + fname}
|
||||||
if err := repo.RunVerbose(cmd); err != nil {
|
if err := repo.RunVerbose(cmd); err != nil {
|
||||||
log.Warn("strip failed")
|
log.Warn("strip failed")
|
||||||
return false, err
|
return false, err
|
||||||
|
@ -218,7 +215,7 @@ func buildPackage(repo *gitpb.Repo) (bool, error) {
|
||||||
log.Info(repo.FullPath, "NOT FOUND ./build HERE")
|
log.Info(repo.FullPath, "NOT FOUND ./build HERE")
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := []string{"dpkg-deb", "--build", "files", fulldebname}
|
cmd := []string{"dpkg-deb", "--root-owner-group", "--build", "files", fulldebname}
|
||||||
result := repo.RunVerbose(cmd)
|
result := repo.RunVerbose(cmd)
|
||||||
if shell.Exists(fulldebname) {
|
if shell.Exists(fulldebname) {
|
||||||
} else {
|
} else {
|
||||||
|
@ -245,93 +242,3 @@ func buildPackage(repo *gitpb.Repo) (bool, error) {
|
||||||
}
|
}
|
||||||
return true, nil
|
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"])
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
|
@ -135,6 +135,7 @@ func readControlFile(repo *gitpb.Repo) error {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
pairs["Architecture"] = "amd64" // TODO: figure this out
|
||||||
|
|
||||||
if err := scanner.Err(); err != nil {
|
if err := scanner.Err(); err != nil {
|
||||||
return err
|
return err
|
|
@ -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
|
||||||
|
}
|
7
main.go
7
main.go
|
@ -66,6 +66,13 @@ func main() {
|
||||||
}
|
}
|
||||||
computeControlValues(me.repo)
|
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 {
|
if argv.Gui != nil {
|
||||||
// only load teh toolkit if you get this far
|
// only load teh toolkit if you get this far
|
||||||
me.myGui.Start() // loads the GUI toolkit
|
me.myGui.Start() // loads the GUI toolkit
|
||||||
|
|
Loading…
Reference in New Issue