74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
//+build mage
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/magefile/mage/sh"
|
|
)
|
|
|
|
// Runs go install for mage. This generates the the version
|
|
// info the binary.
|
|
func Build() error {
|
|
ldf, err := flags()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return sh.Run("go", "install", "-ldflags="+ldf, "github.com/magefile/mage")
|
|
}
|
|
|
|
// Generates binaries for all supported platforms. Currently that means a
|
|
// combination of windows, linux, and OSX in 32 bit and 64 bit formats. The
|
|
// files will be dumped in the local directory with names according to their
|
|
// supported platform.
|
|
func BuildAll() error {
|
|
ldf, err := flags()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var ext string
|
|
for _, OS := range []string{"windows", "darwin", "linux"} {
|
|
if OS == "windows" {
|
|
ext = ".exe"
|
|
} else {
|
|
ext = ""
|
|
}
|
|
for _, ARCH := range []string{"amd64", "386"} {
|
|
log.Printf("running go build for GOOS=%s GOARCH=%s", OS, ARCH)
|
|
env := map[string]string{"GOOS": OS, "GOARCH": ARCH}
|
|
if err := sh.RunWith(env, "go", "build", "-o", "mage_"+OS+"_"+ARCH+ext, "--ldflags="+ldf); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func flags() (string, error) {
|
|
timestamp := time.Now().Format(time.RFC3339)
|
|
hash := hash()
|
|
tag := tag()
|
|
if tag == "" {
|
|
tag = "dev"
|
|
}
|
|
return fmt.Sprintf(`-X "github.com/magefile/mage/mage.timestamp=%s" -X "github.com/magefile/mage/mage.commitHash=%s" -X "github.com/magefile/mage/mage.gitTag=%s"`, timestamp, hash, tag), nil
|
|
}
|
|
|
|
// tag returns the git tag for the current branch or "" if none.
|
|
func tag() string {
|
|
buf := &bytes.Buffer{}
|
|
_, _ = sh.Exec(nil, buf, nil, "git", "describe", "--tags")
|
|
return buf.String()
|
|
}
|
|
|
|
// hash returns the git hash for the current repo or "" if none.
|
|
func hash() string {
|
|
hash, _ := sh.Output("git", "rev-parse", "--short", "HEAD")
|
|
return hash
|
|
}
|