package main // This should build and upload the binary to mirrors // upload binary to mirrors.wit.com/cloud/control-panel import "log" import "fmt" import "time" import "strings" import "os/user" import "os" import "runtime" import "github.com/davecgh/go-spew/spew" import "git.wit.com/wit/shell" // import "os/user" // import "io/ioutil" // github.com/bramvdbogaerde/go-scp var BuildMap map[string]*bool var filename string var builddir string func main() { BuildMap = make(map[string]*bool) setbuilddir() // shell.Quiet(true) shell.Quiet(false) // shell.Run("git tag --list") // os.Exit(-1) for { shell.Run("git checkout master") shell.Run("git pull --tags") shell.Run("go get -v ...") shell.Run("go get -v -u ...") shell.Run("go get -v -u -t") findtags() time.Sleep(time.Second * 60) } } func findtags() { tags := shell.Run("git tag --list") // log.Println(tags) for _, tag := range strings.Split(tags, "\n") { tag = strings.Replace(tag, "v", "", -1) // remove all 'v' chars if (BuildMap[tag] == nil) { log.Println("TAG =", tag, "is nil") log.Println("\tCHECK IF BUILD WAS ATTEMPTED =", tag) BuildMap[tag] = build(tag) } else { if (*BuildMap[tag] == true) { log.Println("TAG =", tag, "is true") } else { log.Println("TAG =", tag, "is false") } } } // os.Exit(0) } func build(tag string) *bool { var b bool url := "https://mirrors.wit.com/cloud/control-panel/linux/" + filename + "-v" + tag + ".md5sum" log.Println("\tTRYING URL", url) md5sum := shell.Chomp(shell.Wget(url)) if (md5sum != "") { log.Println("\tBUILD ALREADY DONE TAG =", tag, "md5sum =", md5sum) b = true // for {} return &b } // for {} shell.Quiet(false) shell.Run("git checkout v" + tag) gitref := shell.Run("git rev-list -1 HEAD") tagref := shell.Run("cat .git/refs/tags/v" + tag) // what is the right way? if (gitref != tagref) { log.Println("\tJESUS HOW TO DO THIS CORRECTLY?", gitref, "ne", tagref) // os.Exit(-1) // return nil } // setup the files that will end up in the binary epoch := fmt.Sprintf("%d", time.Now().Unix()) shell.Write("./resources/BUILDDATE", epoch) shell.Write("./resources/BUILDREF", gitref) // rebuild the binary (always remove the old one shell.Run("rm " + filename) shell.Run("go build") md5sum = shell.Run("md5sum " + filename) log.Println("\tmd5sum =", md5sum) if (md5sum == "") { log.Println("\tBUILD FAILED") b = false return &b } shell.Write("/tmp/autobuild.md5sum", md5sum) upload(tag) // This version has been built yet log.Println("\tTHIS VERSION HAS BEEN UPLOADED =", tag) b = true return &b } func setbuilddir() { user, err := user.Current() spew.Dump(user) if err != nil { os.Exit(-1) } if runtime.GOOS == "linux" { log.Println("loadConfigFile() OS: Linux") filename = "cloud-control-panel" builddir = user.HomeDir + "/go/src/git.wit.com/wit/cloud-control-panel" } else if runtime.GOOS == "windows" { log.Println("loadConfigFile() OS: Windows") builddir = user.HomeDir + "\\go\\src\\git.wit.com\\wit\\cloud-control-panel" filename = "cloud-control-panel.exe" } else { log.Println("loadConfigFile() OS: " + runtime.GOOS) filename = "cloud-control-panel" builddir = user.HomeDir + "/go/src/git.wit.com/wit/cloud-control-panel" } } // upload the files to mirrors func upload(tag string) { mirrors := "root@mirrors.wit.com:/data/mirrors/cloud/control-panel/linux/" // don't update the master VERSION here // shell.Run("scp resources/VERSION " + mirrors) shell.Run("scp cloud-control-panel " + mirrors) shell.Run("scp resources/BUILDDATE " + mirrors + filename + "-v" + tag + ".BUILDDATE") shell.Run("scp cloud-control-panel " + mirrors + filename + "-v" + tag) shell.Run("scp /tmp/autobuild.md5sum " + mirrors + filename + "-v" + tag + ".md5sum") }