| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | // +build ignore
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"bytes" | 
					
						
							|  |  |  | 	"crypto/md5" | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | 	"crypto/sha256" | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | 	"encoding/json" | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	"flag" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2020-06-25 14:38:17 +08:00
										 |  |  | 	"go/build" | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	"io" | 
					
						
							| 
									
										
										
										
											2015-03-02 19:56:40 +08:00
										 |  |  | 	"io/ioutil" | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	"log" | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | 	"os/exec" | 
					
						
							| 
									
										
										
										
											2017-03-21 17:35:18 +08:00
										 |  |  | 	"path" | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"runtime" | 
					
						
							|  |  |  | 	"strconv" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-22 16:50:00 +08:00
										 |  |  | const ( | 
					
						
							|  |  |  | 	windows = "windows" | 
					
						
							|  |  |  | 	linux   = "linux" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | var ( | 
					
						
							| 
									
										
										
										
											2018-04-25 00:42:27 +08:00
										 |  |  | 	//versionRe = regexp.MustCompile(`-[0-9]{1,3}-g[0-9a-f]{5,10}`)
 | 
					
						
							| 
									
										
										
										
											2020-12-01 17:32:12 +08:00
										 |  |  | 	goarch    string | 
					
						
							|  |  |  | 	goos      string | 
					
						
							|  |  |  | 	gocc      string | 
					
						
							|  |  |  | 	cgo       bool | 
					
						
							|  |  |  | 	libc      string | 
					
						
							|  |  |  | 	pkgArch   string | 
					
						
							|  |  |  | 	version   string = "v1" | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 	buildTags []string | 
					
						
							| 
									
										
										
										
											2015-04-22 00:46:44 +08:00
										 |  |  | 	// deb & rpm does not support semver so have to handle their version a little differently
 | 
					
						
							|  |  |  | 	linuxPackageVersion   string = "v1" | 
					
						
							|  |  |  | 	linuxPackageIteration string = "" | 
					
						
							|  |  |  | 	race                  bool | 
					
						
							|  |  |  | 	workingDir            string | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	includeBuildId        bool     = true | 
					
						
							|  |  |  | 	buildId               string   = "0" | 
					
						
							| 
									
										
										
										
											2019-06-25 03:20:21 +08:00
										 |  |  | 	serverBinary          string   = "grafana-server" | 
					
						
							|  |  |  | 	cliBinary             string   = "grafana-cli" | 
					
						
							|  |  |  | 	binaries              []string = []string{serverBinary, cliBinary} | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	isDev                 bool     = false | 
					
						
							| 
									
										
										
										
											2018-04-27 19:41:58 +08:00
										 |  |  | 	enterprise            bool     = false | 
					
						
							| 
									
										
										
										
											2019-01-18 18:36:04 +08:00
										 |  |  | 	skipRpmGen            bool     = false | 
					
						
							|  |  |  | 	skipDebGen            bool     = false | 
					
						
							| 
									
										
										
										
											2019-03-22 23:12:42 +08:00
										 |  |  | 	printGenVersion       bool     = false | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func main() { | 
					
						
							|  |  |  | 	log.SetOutput(os.Stdout) | 
					
						
							|  |  |  | 	log.SetFlags(0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	var buildIdRaw string | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 	var buildTagsRaw string | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH") | 
					
						
							|  |  |  | 	flag.StringVar(&goos, "goos", runtime.GOOS, "GOOS") | 
					
						
							| 
									
										
										
										
											2016-09-18 18:07:12 +08:00
										 |  |  | 	flag.StringVar(&gocc, "cc", "", "CC") | 
					
						
							| 
									
										
										
										
											2019-10-24 20:34:14 +08:00
										 |  |  | 	flag.StringVar(&libc, "libc", "", "LIBC") | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 	flag.StringVar(&buildTagsRaw, "build-tags", "", "Sets custom build tags") | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 	flag.BoolVar(&cgo, "cgo-enabled", cgo, "Enable cgo") | 
					
						
							| 
									
										
										
										
											2016-09-18 18:07:12 +08:00
										 |  |  | 	flag.StringVar(&pkgArch, "pkg-arch", "", "PKG ARCH") | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	flag.BoolVar(&race, "race", race, "Use race detector") | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	flag.BoolVar(&includeBuildId, "includeBuildId", includeBuildId, "IncludeBuildId in package name") | 
					
						
							| 
									
										
										
										
											2018-04-27 19:41:58 +08:00
										 |  |  | 	flag.BoolVar(&enterprise, "enterprise", enterprise, "Build enterprise version of Grafana") | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	flag.StringVar(&buildIdRaw, "buildId", "0", "Build ID from CI system") | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	flag.BoolVar(&isDev, "dev", isDev, "optimal for development, skips certain steps") | 
					
						
							| 
									
										
										
										
											2019-01-18 18:36:04 +08:00
										 |  |  | 	flag.BoolVar(&skipRpmGen, "skipRpm", skipRpmGen, "skip rpm package generation (default: false)") | 
					
						
							|  |  |  | 	flag.BoolVar(&skipDebGen, "skipDeb", skipDebGen, "skip deb package generation (default: false)") | 
					
						
							| 
									
										
										
										
											2019-03-22 23:12:42 +08:00
										 |  |  | 	flag.BoolVar(&printGenVersion, "gen-version", printGenVersion, "generate Grafana version and output (default: false)") | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	flag.Parse() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	buildId = shortenBuildId(buildIdRaw) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-30 22:21:39 +08:00
										 |  |  | 	readVersionFromPackageJson() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-21 15:33:48 +08:00
										 |  |  | 	if pkgArch == "" { | 
					
						
							|  |  |  | 		pkgArch = goarch | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-22 23:12:42 +08:00
										 |  |  | 	if printGenVersion { | 
					
						
							|  |  |  | 		printGeneratedVersion() | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 	if len(buildTagsRaw) > 0 { | 
					
						
							|  |  |  | 		buildTags = strings.Split(buildTagsRaw, ",") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-30 22:21:39 +08:00
										 |  |  | 	log.Printf("Version: %s, Linux Version: %s, Package Iteration: %s\n", version, linuxPackageVersion, linuxPackageIteration) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	if flag.NArg() == 0 { | 
					
						
							|  |  |  | 		log.Println("Usage: go run build.go build") | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-28 20:10:09 +08:00
										 |  |  | 	workingDir, _ = os.Getwd() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	for _, cmd := range flag.Args() { | 
					
						
							|  |  |  | 		switch cmd { | 
					
						
							|  |  |  | 		case "setup": | 
					
						
							|  |  |  | 			setup() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-24 20:34:14 +08:00
										 |  |  | 		case "build-srv", "build-server": | 
					
						
							| 
									
										
										
										
											2017-12-02 18:22:51 +08:00
										 |  |  | 			clean() | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 			doBuild("grafana-server", "./pkg/cmd/grafana-server", buildTags) | 
					
						
							| 
									
										
										
										
											2017-12-02 18:22:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-25 21:42:19 +08:00
										 |  |  | 		case "build-cli": | 
					
						
							|  |  |  | 			clean() | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 			doBuild("grafana-cli", "./pkg/cmd/grafana-cli", buildTags) | 
					
						
							| 
									
										
										
										
											2016-12-09 22:25:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 		case "build": | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 			//clean()
 | 
					
						
							| 
									
										
										
										
											2016-02-15 22:22:03 +08:00
										 |  |  | 			for _, binary := range binaries { | 
					
						
							| 
									
										
										
										
											2020-10-29 18:28:23 +08:00
										 |  |  | 				doBuild(binary, "./pkg/cmd/"+binary, buildTags) | 
					
						
							| 
									
										
										
										
											2016-02-15 22:22:03 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 		case "build-frontend": | 
					
						
							| 
									
										
										
										
											2020-12-01 17:32:12 +08:00
										 |  |  | 			yarn("build") | 
					
						
							| 
									
										
										
										
											2015-12-05 05:36:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | 		case "sha-dist": | 
					
						
							|  |  |  | 			shaFilesInDist() | 
					
						
							| 
									
										
										
										
											2016-10-18 16:54:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | 		case "latest": | 
					
						
							|  |  |  | 			makeLatestDistCopies() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 		case "clean": | 
					
						
							| 
									
										
										
										
											2015-03-03 01:26:43 +08:00
										 |  |  | 			clean() | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		default: | 
					
						
							|  |  |  | 			log.Fatalf("Unknown command %q", cmd) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | func makeLatestDistCopies() { | 
					
						
							| 
									
										
										
										
											2017-02-28 16:09:49 +08:00
										 |  |  | 	files, err := ioutil.ReadDir("dist") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatalf("failed to create latest copies. Cannot read from /dist") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-21 17:35:18 +08:00
										 |  |  | 	latestMapping := map[string]string{ | 
					
						
							| 
									
										
										
										
											2019-10-24 20:34:14 +08:00
										 |  |  | 		"_amd64.deb":               "dist/grafana_latest_amd64.deb", | 
					
						
							|  |  |  | 		".x86_64.rpm":              "dist/grafana-latest-1.x86_64.rpm", | 
					
						
							|  |  |  | 		".linux-amd64.tar.gz":      "dist/grafana-latest.linux-x64.tar.gz", | 
					
						
							|  |  |  | 		".linux-amd64-musl.tar.gz": "dist/grafana-latest.linux-x64-musl.tar.gz", | 
					
						
							|  |  |  | 		".linux-armv7.tar.gz":      "dist/grafana-latest.linux-armv7.tar.gz", | 
					
						
							|  |  |  | 		".linux-armv7-musl.tar.gz": "dist/grafana-latest.linux-armv7-musl.tar.gz", | 
					
						
							|  |  |  | 		".linux-armv6.tar.gz":      "dist/grafana-latest.linux-armv6.tar.gz", | 
					
						
							|  |  |  | 		".linux-arm64.tar.gz":      "dist/grafana-latest.linux-arm64.tar.gz", | 
					
						
							|  |  |  | 		".linux-arm64-musl.tar.gz": "dist/grafana-latest.linux-arm64-musl.tar.gz", | 
					
						
							| 
									
										
										
										
											2015-10-17 00:26:30 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 16:09:49 +08:00
										 |  |  | 	for _, file := range files { | 
					
						
							|  |  |  | 		for extension, fullName := range latestMapping { | 
					
						
							|  |  |  | 			if strings.HasSuffix(file.Name(), extension) { | 
					
						
							|  |  |  | 				runError("cp", path.Join("dist", file.Name()), fullName) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 00:21:52 +08:00
										 |  |  | func readVersionFromPackageJson() { | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | 	reader, err := os.Open("package.json") | 
					
						
							| 
									
										
										
										
											2015-03-03 00:21:52 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | 		log.Fatal("Failed to open package.json") | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer reader.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	jsonObj := map[string]interface{}{} | 
					
						
							|  |  |  | 	jsonParser := json.NewDecoder(reader) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := jsonParser.Decode(&jsonObj); err != nil { | 
					
						
							|  |  |  | 		log.Fatal("Failed to decode package.json") | 
					
						
							| 
									
										
										
										
											2015-03-03 00:21:52 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	version = jsonObj["version"].(string) | 
					
						
							| 
									
										
										
										
											2015-04-22 00:46:44 +08:00
										 |  |  | 	linuxPackageVersion = version | 
					
						
							|  |  |  | 	linuxPackageIteration = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// handle pre version stuff (deb / rpm does not support semver)
 | 
					
						
							| 
									
										
										
										
											2015-04-22 14:56:14 +08:00
										 |  |  | 	parts := strings.Split(version, "-") | 
					
						
							| 
									
										
										
										
											2015-04-22 00:46:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 14:56:14 +08:00
										 |  |  | 	if len(parts) > 1 { | 
					
						
							|  |  |  | 		linuxPackageVersion = parts[0] | 
					
						
							|  |  |  | 		linuxPackageIteration = parts[1] | 
					
						
							| 
									
										
										
										
											2015-04-22 00:46:44 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-11 19:20:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// add timestamp to iteration
 | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	if includeBuildId { | 
					
						
							|  |  |  | 		if buildId != "0" { | 
					
						
							|  |  |  | 			linuxPackageIteration = fmt.Sprintf("%s%s", buildId, linuxPackageIteration) | 
					
						
							| 
									
										
										
										
											2017-02-02 22:55:37 +08:00
										 |  |  | 		} else { | 
					
						
							|  |  |  | 			linuxPackageIteration = fmt.Sprintf("%d%s", time.Now().Unix(), linuxPackageIteration) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-01-30 22:21:39 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-03 00:21:52 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-01 17:32:12 +08:00
										 |  |  | func yarn(params ...string) { | 
					
						
							|  |  |  | 	runPrint(`yarn run`, params...) | 
					
						
							| 
									
										
										
										
											2015-01-28 20:10:09 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-24 07:43:36 +08:00
										 |  |  | func genPackageVersion() string { | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 	if includeBuildId { | 
					
						
							| 
									
										
										
										
											2019-03-24 07:43:36 +08:00
										 |  |  | 		return fmt.Sprintf("%v-%v", linuxPackageVersion, linuxPackageIteration) | 
					
						
							| 
									
										
										
										
											2017-01-30 22:21:39 +08:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2019-03-24 07:43:36 +08:00
										 |  |  | 		return version | 
					
						
							| 
									
										
										
										
											2017-01-30 22:21:39 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-03-24 07:43:36 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | func setup() { | 
					
						
							| 
									
										
										
										
											2020-10-27 20:57:12 +08:00
										 |  |  | 	args := []string{"install", "-v"} | 
					
						
							|  |  |  | 	if goos == windows { | 
					
						
							|  |  |  | 		args = append(args, "-buildmode=exe") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args = append(args, "./pkg/cmd/grafana-server") | 
					
						
							|  |  |  | 	runPrint("go", args...) | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-22 23:12:42 +08:00
										 |  |  | func printGeneratedVersion() { | 
					
						
							| 
									
										
										
										
											2019-03-24 07:43:36 +08:00
										 |  |  | 	fmt.Print(genPackageVersion()) | 
					
						
							| 
									
										
										
										
											2019-03-22 23:12:42 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | func test(pkg string) { | 
					
						
							|  |  |  | 	setBuildEnv() | 
					
						
							| 
									
										
										
										
											2020-10-27 20:57:12 +08:00
										 |  |  | 	args := []string{"test", "-short", "-timeout", "60s"} | 
					
						
							|  |  |  | 	if goos == windows { | 
					
						
							|  |  |  | 		args = append(args, "-buildmode=exe") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	args = append(args, pkg) | 
					
						
							|  |  |  | 	runPrint("go", args...) | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-25 14:38:17 +08:00
										 |  |  | func doBuild(binaryName, pkg string, tags []string) { | 
					
						
							| 
									
										
										
										
											2019-10-24 20:34:14 +08:00
										 |  |  | 	libcPart := "" | 
					
						
							|  |  |  | 	if libc != "" { | 
					
						
							|  |  |  | 		libcPart = fmt.Sprintf("-%s", libc) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	binary := fmt.Sprintf("./bin/%s-%s%s/%s", goos, goarch, libcPart, binaryName) | 
					
						
							| 
									
										
										
										
											2018-05-28 16:39:42 +08:00
										 |  |  | 	if isDev { | 
					
						
							| 
									
										
										
										
											2019-10-24 20:34:14 +08:00
										 |  |  | 		//don't include os/arch/libc in output path in dev environment
 | 
					
						
							| 
									
										
										
										
											2018-05-28 16:39:42 +08:00
										 |  |  | 		binary = fmt.Sprintf("./bin/%s", binaryName) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-22 16:50:00 +08:00
										 |  |  | 	if goos == windows { | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 		binary += ".exe" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	if !isDev { | 
					
						
							|  |  |  | 		rmr(binary, binary+".md5") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	args := []string{"build", "-ldflags", ldflags()} | 
					
						
							| 
									
										
										
										
											2020-10-27 20:57:12 +08:00
										 |  |  | 	if goos == windows { | 
					
						
							|  |  |  | 		// Work around a linking error on Windows: "export ordinal too large"
 | 
					
						
							|  |  |  | 		args = append(args, "-buildmode=exe") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	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) | 
					
						
							| 
									
										
										
										
											2015-12-04 18:21:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	if !isDev { | 
					
						
							|  |  |  | 		setBuildEnv() | 
					
						
							|  |  |  | 		runPrint("go", "version") | 
					
						
							| 
									
										
										
										
											2019-10-24 20:34:14 +08:00
										 |  |  | 		libcPart := "" | 
					
						
							|  |  |  | 		if libc != "" { | 
					
						
							|  |  |  | 			libcPart = fmt.Sprintf("/%s", libc) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		fmt.Printf("Targeting %s/%s%s\n", goos, goarch, libcPart) | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	runPrint("go", args...) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	if !isDev { | 
					
						
							|  |  |  | 		// 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) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func ldflags() string { | 
					
						
							|  |  |  | 	var b bytes.Buffer | 
					
						
							|  |  |  | 	b.WriteString("-w") | 
					
						
							| 
									
										
										
										
											2015-12-01 16:23:30 +08:00
										 |  |  | 	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())) | 
					
						
							| 
									
										
										
										
											2018-10-29 20:27:29 +08:00
										 |  |  | 	b.WriteString(fmt.Sprintf(" -X main.buildBranch=%s", getGitBranch())) | 
					
						
							| 
									
										
										
										
											2019-09-09 13:49:24 +08:00
										 |  |  | 	if v := os.Getenv("LDFLAGS"); v != "" { | 
					
						
							| 
									
										
										
										
											2019-10-01 15:31:25 +08:00
										 |  |  | 		b.WriteString(fmt.Sprintf(" -extldflags \"%s\"", v)) | 
					
						
							| 
									
										
										
										
											2019-09-09 13:49:24 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	return b.String() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func rmr(paths ...string) { | 
					
						
							|  |  |  | 	for _, path := range paths { | 
					
						
							|  |  |  | 		log.Println("rm -r", path) | 
					
						
							|  |  |  | 		os.RemoveAll(path) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func clean() { | 
					
						
							| 
									
										
										
										
											2018-04-18 17:24:29 +08:00
										 |  |  | 	if isDev { | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 01:26:43 +08:00
										 |  |  | 	rmr("dist") | 
					
						
							|  |  |  | 	rmr("tmp") | 
					
						
							| 
									
										
										
										
											2020-06-25 14:38:17 +08:00
										 |  |  | 	rmr(filepath.Join(build.Default.GOPATH, fmt.Sprintf("pkg/%s_%s/github.com/grafana", goos, goarch))) | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func setBuildEnv() { | 
					
						
							|  |  |  | 	os.Setenv("GOOS", goos) | 
					
						
							| 
									
										
										
										
											2018-09-22 16:50:00 +08:00
										 |  |  | 	if goos == windows { | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 		// require windows >=7
 | 
					
						
							|  |  |  | 		os.Setenv("CGO_CFLAGS", "-D_WIN32_WINNT=0x0601") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-09-22 16:50:00 +08:00
										 |  |  | 	if goarch != "amd64" || goos != linux { | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 		// needed for all other archs
 | 
					
						
							|  |  |  | 		cgo = true | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	if strings.HasPrefix(goarch, "armv") { | 
					
						
							|  |  |  | 		os.Setenv("GOARCH", "arm") | 
					
						
							|  |  |  | 		os.Setenv("GOARM", goarch[4:]) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		os.Setenv("GOARCH", goarch) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-05-08 15:42:20 +08:00
										 |  |  | 	if cgo { | 
					
						
							|  |  |  | 		os.Setenv("CGO_ENABLED", "1") | 
					
						
							| 
									
										
										
										
											2016-09-18 18:07:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if gocc != "" { | 
					
						
							|  |  |  | 		os.Setenv("CC", gocc) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-29 20:27:29 +08:00
										 |  |  | func getGitBranch() string { | 
					
						
							|  |  |  | 	v, err := runError("git", "rev-parse", "--abbrev-ref", "HEAD") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2021-05-06 22:29:29 +08:00
										 |  |  | 		return "main" | 
					
						
							| 
									
										
										
										
											2018-10-29 20:27:29 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return string(v) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | func getGitSha() string { | 
					
						
							| 
									
										
										
										
											2017-01-30 15:08:37 +08:00
										 |  |  | 	v, err := runError("git", "rev-parse", "--short", "HEAD") | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return "unknown-dev" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return string(v) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func buildStamp() int64 { | 
					
						
							| 
									
										
										
										
											2019-09-09 13:30:48 +08:00
										 |  |  | 	// use SOURCE_DATE_EPOCH if set.
 | 
					
						
							|  |  |  | 	if s, _ := strconv.ParseInt(os.Getenv("SOURCE_DATE_EPOCH"), 10, 64); s > 0 { | 
					
						
							|  |  |  | 		return s | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	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 runError(cmd string, args ...string) ([]byte, error) { | 
					
						
							|  |  |  | 	ecmd := exec.Command(cmd, args...) | 
					
						
							|  |  |  | 	bs, err := ecmd.CombinedOutput() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-04 23:23:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	return bytes.TrimSpace(bs), nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func runPrint(cmd string, args ...string) { | 
					
						
							|  |  |  | 	log.Println(cmd, strings.Join(args, " ")) | 
					
						
							|  |  |  | 	ecmd := exec.Command(cmd, args...) | 
					
						
							| 
									
										
										
										
											2019-10-08 16:17:31 +08:00
										 |  |  | 	ecmd.Env = append(os.Environ(), "GO111MODULE=on") | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 	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() | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-10-06 16:53:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | func shaFilesInDist() { | 
					
						
							| 
									
										
										
										
											2016-10-06 16:53:24 +08:00
										 |  |  | 	filepath.Walk("./dist", func(path string, f os.FileInfo, err error) error { | 
					
						
							| 
									
										
										
										
											2017-01-27 19:41:05 +08:00
										 |  |  | 		if path == "./dist" { | 
					
						
							| 
									
										
										
										
											2017-01-30 15:08:37 +08:00
										 |  |  | 			return nil | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-01-27 19:41:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Simplify comparison to bool constant (gosimple)
This fixes:
build.go:553:6: should omit comparison to bool constant, can be simplified to !strings.Contains(path, ".sha256") (S1002)
pkg/cmd/grafana-cli/commands/ls_command.go:27:5: should omit comparison to bool constant, can be simplified to !pluginDirInfo.IsDir() (S1002)
pkg/components/dynmap/dynmap_test.go:24:5: should omit comparison to bool constant, can be simplified to !value (S1002)
pkg/components/dynmap/dynmap_test.go:122:14: should omit comparison to bool constant, can be simplified to b (S1002)
pkg/components/dynmap/dynmap_test.go:125:14: should omit comparison to bool constant, can be simplified to !b (S1002)
pkg/components/dynmap/dynmap_test.go:128:14: should omit comparison to bool constant, can be simplified to !b (S1002)
pkg/models/org_user.go:51:5: should omit comparison to bool constant, can be simplified to !(*r).IsValid() (S1002)
pkg/plugins/datasource/wrapper/datasource_plugin_wrapper_test.go:77:12: should omit comparison to bool constant, can be simplified to !haveBool (S1002)
pkg/services/alerting/conditions/evaluator.go:23:9: should omit comparison to bool constant, can be simplified to !reducedValue.Valid (S1002)
pkg/services/alerting/conditions/evaluator.go:48:5: should omit comparison to bool constant, can be simplified to !reducedValue.Valid (S1002)
pkg/services/alerting/conditions/evaluator.go:91:5: should omit comparison to bool constant, can be simplified to !reducedValue.Valid (S1002)
pkg/services/alerting/conditions/query.go:56:6: should omit comparison to bool constant, can be simplified to !reducedValue.Valid (S1002)
pkg/services/alerting/extractor.go:107:20: should omit comparison to bool constant, can be simplified to !enabled.MustBool() (S1002)
pkg/services/alerting/notifiers/telegram.go:222:41: should omit comparison to bool constant, can be simplified to this.UploadImage (S1002)
pkg/services/sqlstore/apikey.go:58:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/apikey.go:72:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/dashboard.go:66:33: should omit comparison to bool constant, can be simplified to !cmd.Overwrite (S1002)
pkg/services/sqlstore/dashboard.go:175:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/dashboard.go:311:13: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/dashboard.go:444:12: should omit comparison to bool constant, can be simplified to !exists (S1002)
pkg/services/sqlstore/dashboard.go:472:12: should omit comparison to bool constant, can be simplified to !exists (S1002)
pkg/services/sqlstore/dashboard.go:554:32: should omit comparison to bool constant, can be simplified to !cmd.Overwrite (S1002)
pkg/services/sqlstore/dashboard_snapshot.go:83:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/plugin_setting.go:39:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/quota.go:34:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/quota.go:111:6: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/quota.go:136:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/quota.go:213:6: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/temp_user.go:129:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/user.go:157:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/user.go:182:5: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/user.go:191:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/user.go:212:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/services/sqlstore/user.go:307:12: should omit comparison to bool constant, can be simplified to !has (S1002)
pkg/social/generic_oauth.go:185:5: should omit comparison to bool constant, can be simplified to !s.extractToken(&data, token) (S1002)
pkg/tsdb/mssql/mssql.go:148:39: should omit comparison to bool constant, can be simplified to ok (S1002)
pkg/tsdb/mssql/mssql.go:212:6: should omit comparison to bool constant, can be simplified to !query.Model.Get("fillNull").MustBool(false) (S1002)
pkg/tsdb/mssql/mssql.go:247:56: should omit comparison to bool constant, can be simplified to ok (S1002)
pkg/tsdb/mssql/mssql.go:274:7: should omit comparison to bool constant, can be simplified to !exist (S1002)
pkg/tsdb/mssql/mssql.go:282:8: should omit comparison to bool constant, can be simplified to !exist (S1002)
pkg/tsdb/mysql/mysql.go:221:6: should omit comparison to bool constant, can be simplified to !query.Model.Get("fillNull").MustBool(false) (S1002)
pkg/tsdb/mysql/mysql.go:256:56: should omit comparison to bool constant, can be simplified to ok (S1002)
pkg/tsdb/mysql/mysql.go:283:7: should omit comparison to bool constant, can be simplified to !exist (S1002)
pkg/tsdb/mysql/mysql.go:291:8: should omit comparison to bool constant, can be simplified to !exist (S1002)
pkg/tsdb/postgres/postgres.go:134:39: should omit comparison to bool constant, can be simplified to ok (S1002)
pkg/tsdb/postgres/postgres.go:201:6: should omit comparison to bool constant, can be simplified to !query.Model.Get("fillNull").MustBool(false) (S1002)
pkg/tsdb/postgres/postgres.go:236:56: should omit comparison to bool constant, can be simplified to ok (S1002)
pkg/tsdb/postgres/postgres.go:263:7: should omit comparison to bool constant, can be simplified to !exist (S1002)
pkg/tsdb/postgres/postgres.go:271:8: should omit comparison to bool constant, can be simplified to !exist (S1002)
											
										 
											2018-04-17 02:12:59 +08:00
										 |  |  | 		if !strings.Contains(path, ".sha256") { | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | 			err := shaFile(path) | 
					
						
							| 
									
										
										
										
											2017-01-30 15:08:37 +08:00
										 |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				log.Printf("Failed to create sha file. error: %v\n", err) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-10-06 16:53:24 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | func shaFile(file string) error { | 
					
						
							| 
									
										
										
										
											2016-10-06 16:53:24 +08:00
										 |  |  | 	fd, err := os.Open(file) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer fd.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | 	h := sha256.New() | 
					
						
							| 
									
										
										
										
											2016-10-06 16:53:24 +08:00
										 |  |  | 	_, err = io.Copy(h, fd) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-24 03:48:31 +08:00
										 |  |  | 	out, err := os.Create(file + ".sha256") | 
					
						
							| 
									
										
										
										
											2016-10-06 16:53:24 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_, err = fmt.Fprintf(out, "%x\n", h.Sum(nil)) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return out.Close() | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func shortenBuildId(buildId string) string { | 
					
						
							|  |  |  | 	buildId = strings.Replace(buildId, "-", "", -1) | 
					
						
							| 
									
										
										
										
											2018-11-12 17:47:27 +08:00
										 |  |  | 	if len(buildId) < 9 { | 
					
						
							| 
									
										
										
										
											2018-11-05 22:05:12 +08:00
										 |  |  | 		return buildId | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return buildId[0:8] | 
					
						
							|  |  |  | } |