mirror of https://github.com/grafana/grafana
pull/1442/head
parent
6ebf766342
commit
d06174fb56
@ -0,0 +1,246 @@ |
||||
// +build ignore
|
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"bytes" |
||||
"crypto/md5" |
||||
"flag" |
||||
"fmt" |
||||
"io" |
||||
"log" |
||||
"os" |
||||
"os/exec" |
||||
"path/filepath" |
||||
"regexp" |
||||
"runtime" |
||||
"strconv" |
||||
"strings" |
||||
"time" |
||||
) |
||||
|
||||
var ( |
||||
versionRe = regexp.MustCompile(`-[0-9]{1,3}-g[0-9a-f]{5,10}`) |
||||
goarch string |
||||
goos string |
||||
noupgrade bool |
||||
version string = "2.0.0-alpha" |
||||
race bool |
||||
) |
||||
|
||||
const minGoVersion = 1.3 |
||||
|
||||
func main() { |
||||
log.SetOutput(os.Stdout) |
||||
log.SetFlags(0) |
||||
|
||||
if os.Getenv("GOPATH") == "" { |
||||
cwd, err := os.Getwd() |
||||
if err != nil { |
||||
log.Fatal(err) |
||||
} |
||||
gopath := filepath.Clean(filepath.Join(cwd, "../../../../")) |
||||
log.Println("GOPATH is", gopath) |
||||
os.Setenv("GOPATH", gopath) |
||||
} |
||||
|
||||
//os.Setenv("PATH", fmt.Sprintf("%s%cbin%c%s", os.Getenv("GOPATH"), os.PathSeparator, os.PathListSeparator, os.Getenv("PATH")))
|
||||
|
||||
flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH") |
||||
flag.StringVar(&goos, "goos", runtime.GOOS, "GOOS") |
||||
flag.BoolVar(&race, "race", race, "Use race detector") |
||||
flag.Parse() |
||||
|
||||
if flag.NArg() == 0 { |
||||
log.Println("Usage: go run build.go build") |
||||
return |
||||
} |
||||
|
||||
for _, cmd := range flag.Args() { |
||||
switch cmd { |
||||
case "setup": |
||||
setup() |
||||
|
||||
case "build": |
||||
pkg := "." |
||||
var tags []string |
||||
if noupgrade { |
||||
tags = []string{"noupgrade"} |
||||
} |
||||
build(pkg, tags) |
||||
|
||||
case "test": |
||||
pkg := "./..." |
||||
test(pkg) |
||||
|
||||
case "clean": |
||||
clean() |
||||
|
||||
default: |
||||
log.Fatalf("Unknown command %q", cmd) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func setup() { |
||||
runPrint("go", "get", "-v", "github.com/tools/godep") |
||||
} |
||||
|
||||
func test(pkg string) { |
||||
setBuildEnv() |
||||
runPrint("go", "test", "-short", "-timeout", "60s", pkg) |
||||
} |
||||
|
||||
func build(pkg string, tags []string) { |
||||
binary := "./bin/grafana" |
||||
if goos == "windows" { |
||||
binary += ".exe" |
||||
} |
||||
|
||||
rmr(binary, binary+".md5") |
||||
args := []string{"build", "-ldflags", ldflags()} |
||||
if len(tags) > 0 { |
||||
args = append(args, "-tags", strings.Join(tags, ",")) |
||||
} |
||||
if race { |
||||
args = append(args, "-race") |
||||
} |
||||
|
||||
args = append(args, "-o", binary) |
||||
args = append(args, pkg) |
||||
setBuildEnv() |
||||
runPrint("go", args...) |
||||
|
||||
// Create an md5 checksum of the binary, to be included in the archive for
|
||||
// automatic upgrades.
|
||||
err := md5File(binary) |
||||
if err != nil { |
||||
log.Fatal(err) |
||||
} |
||||
} |
||||
|
||||
func ldflags() string { |
||||
var b bytes.Buffer |
||||
b.WriteString("-w") |
||||
b.WriteString(fmt.Sprintf(" -X main.version '%s'", version)) |
||||
b.WriteString(fmt.Sprintf(" -X main.commit '%s'", getGitSha())) |
||||
b.WriteString(fmt.Sprintf(" -X main.buildstamp %d", buildStamp())) |
||||
return b.String() |
||||
} |
||||
|
||||
func rmr(paths ...string) { |
||||
for _, path := range paths { |
||||
log.Println("rm -r", path) |
||||
os.RemoveAll(path) |
||||
} |
||||
} |
||||
|
||||
func clean() { |
||||
rmr("bin", "Godeps/_workspace/pkg", "Godeps/_workspace/bin") |
||||
rmr(filepath.Join(os.Getenv("GOPATH"), fmt.Sprintf("pkg/%s_%s/github.com/grafana-pro", goos, goarch))) |
||||
} |
||||
|
||||
func setBuildEnv() { |
||||
os.Setenv("GOOS", goos) |
||||
if strings.HasPrefix(goarch, "armv") { |
||||
os.Setenv("GOARCH", "arm") |
||||
os.Setenv("GOARM", goarch[4:]) |
||||
} else { |
||||
os.Setenv("GOARCH", goarch) |
||||
} |
||||
if goarch == "386" { |
||||
os.Setenv("GO386", "387") |
||||
} |
||||
wd, err := os.Getwd() |
||||
if err != nil { |
||||
log.Println("Warning: can't determine current dir:", err) |
||||
log.Println("Build might not work as expected") |
||||
} |
||||
os.Setenv("GOPATH", fmt.Sprintf("%s%c%s", filepath.Join(wd, "Godeps", "_workspace"), os.PathListSeparator, os.Getenv("GOPATH"))) |
||||
log.Println("GOPATH=" + os.Getenv("GOPATH")) |
||||
} |
||||
|
||||
func getGitSha() string { |
||||
v, err := runError("git", "describe", "--always", "--dirty") |
||||
if err != nil { |
||||
return "unknown-dev" |
||||
} |
||||
v = versionRe.ReplaceAllFunc(v, func(s []byte) []byte { |
||||
s[0] = '+' |
||||
return s |
||||
}) |
||||
return string(v) |
||||
} |
||||
|
||||
func buildStamp() int64 { |
||||
bs, err := runError("git", "show", "-s", "--format=%ct") |
||||
if err != nil { |
||||
return time.Now().Unix() |
||||
} |
||||
s, _ := strconv.ParseInt(string(bs), 10, 64) |
||||
return s |
||||
} |
||||
|
||||
func buildArch() string { |
||||
os := goos |
||||
if os == "darwin" { |
||||
os = "macosx" |
||||
} |
||||
return fmt.Sprintf("%s-%s", os, goarch) |
||||
} |
||||
|
||||
func run(cmd string, args ...string) []byte { |
||||
bs, err := runError(cmd, args...) |
||||
if err != nil { |
||||
log.Println(cmd, strings.Join(args, " ")) |
||||
log.Println(string(bs)) |
||||
log.Fatal(err) |
||||
} |
||||
return bytes.TrimSpace(bs) |
||||
} |
||||
|
||||
func runError(cmd string, args ...string) ([]byte, error) { |
||||
ecmd := exec.Command(cmd, args...) |
||||
bs, err := ecmd.CombinedOutput() |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
return bytes.TrimSpace(bs), nil |
||||
} |
||||
|
||||
func runPrint(cmd string, args ...string) { |
||||
log.Println(cmd, strings.Join(args, " ")) |
||||
ecmd := exec.Command(cmd, args...) |
||||
ecmd.Stdout = os.Stdout |
||||
ecmd.Stderr = os.Stderr |
||||
err := ecmd.Run() |
||||
if err != nil { |
||||
log.Fatal(err) |
||||
} |
||||
} |
||||
|
||||
func md5File(file string) error { |
||||
fd, err := os.Open(file) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
defer fd.Close() |
||||
|
||||
h := md5.New() |
||||
_, err = io.Copy(h, fd) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
out, err := os.Create(file + ".md5") |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
_, err = fmt.Fprintf(out, "%x\n", h.Sum(nil)) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
return out.Close() |
||||
} |
@ -1 +1 @@ |
||||
Subproject commit d1b31bb3d699f674da4b02d34421edc03bf9e275 |
||||
Subproject commit 72d953220756e1ebf03c2a4d3aa108e2fc11a969 |
Loading…
Reference in new issue