github.com/stampzilla/stampzilla-go@v2.0.0-rc9+incompatible/build.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "log" 7 "os" 8 "os/exec" 9 "path/filepath" 10 "strings" 11 "time" 12 ) 13 14 var dest = "dist" 15 16 func main() { 17 files, err := ioutil.ReadDir("nodes") 18 if err != nil { 19 log.Fatal(err) 20 } 21 22 os.Mkdir(dest, os.ModePerm) 23 24 for _, dir := range files { 25 path := filepath.Join("nodes", dir.Name()) 26 if !dir.IsDir() || !strings.HasPrefix(dir.Name(), "stampzilla-") { 27 continue 28 } 29 if _, err := os.Stat(filepath.Join("nodes", dir.Name(), "RELEASE")); os.IsNotExist(err) { 30 continue 31 } 32 33 log.Println("found RELEASE file", dir.Name()) 34 build(path) 35 } 36 37 fmt.Println("Building stampzilla cli") 38 build("stampzilla") 39 } 40 41 func build(path string) { 42 for _, goos := range []string{"linux"} { 43 for _, goarch := range []string{"arm", "arm64", "amd64"} { 44 binName := filepath.Base(fmt.Sprintf("%s-%s-%s", path, goos, goarch)) 45 fmt.Printf("building %s...\n", binName) 46 cmd := exec.Command("go", getArgs(path, binName)...) 47 cmd.Env = os.Environ() 48 cmd.Env = append(cmd.Env, "GOOS="+goos, "GOARCH="+goarch, "CGO_ENABLED=0") 49 stdoutStderr, err := cmd.CombinedOutput() 50 if err != nil { 51 log.Println(string(stdoutStderr)) 52 log.Fatal(err) 53 } 54 } 55 } 56 fmt.Printf("done\n") 57 } 58 59 func getArgs(path, binName string) []string { 60 m := []string{ 61 "build", 62 "-ldflags", 63 "-X github.com/stampzilla/stampzilla-go/pkg/build.Version=" + os.Getenv("TRAVIS_TAG") + ` -X "github.com/stampzilla/stampzilla-go/pkg/build.BuildTime=` + time.Now().Format(time.RFC3339) + `" -X github.com/stampzilla/stampzilla-go/pkg/build.Commit=` + os.Getenv("TRAVIS_COMMIT"), 64 "-o", 65 filepath.Join(dest, binName), 66 } 67 filesToBuild, err := filepath.Glob(filepath.Join(path, "*.go")) 68 if err != nil { 69 log.Fatal(err) 70 } 71 m = append(m, filesToBuild...) 72 return m 73 }