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  }