From 588833d06fb53160ffe3661c40f74f118259bad7 Mon Sep 17 00:00:00 2001 From: "Anand Babu (AB) Periasamy" Date: Mon, 26 Oct 2015 02:36:01 -0700 Subject: [PATCH] build time constants --- Makefile | 24 ++++---- build-constants.go | 14 +++++ buildscripts/gen-constants.go | 109 ++++++++++++++++++++++++++++++++++ buildscripts/genversion.go | 77 ------------------------ version-main.go | 3 +- version.go | 7 --- 6 files changed, 137 insertions(+), 97 deletions(-) create mode 100644 build-constants.go create mode 100644 buildscripts/gen-constants.go delete mode 100644 buildscripts/genversion.go delete mode 100644 version.go diff --git a/Makefile b/Makefile index 41ed187d8..12288e56d 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,9 @@ checkgopath: @for miniopath in $(echo ${GOPATH} | sed 's/:/\n/g'); do if [ ! -d ${miniopath}/src/github.com/minio/minio ]; then echo "Project not found in ${miniopath}, please follow instructions provided at https://github.com/minio/minio/blob/master/CONTRIBUTING.md#setup-your-minio-github-repository" && exit 1; fi done getdeps: checkdeps checkgopath - @go get github.com/golang/lint/golint && echo "Installed golint:" - @go get golang.org/x/tools/cmd/vet && echo "Installed vet:" - @go get github.com/fzipp/gocyclo && echo "Installed gocyclo:" + @go get -u github.com/golang/lint/golint && echo "Installed golint:" + @go get -u golang.org/x/tools/cmd/vet && echo "Installed vet:" + @go get -u github.com/fzipp/gocyclo && echo "Installed gocyclo:" @go get -u github.com/remyoudompheng/go-misc/deadcode && echo "Installed deadcode:" verifiers: getdeps vet fmt lint cyclo @@ -38,8 +38,11 @@ cyclo: @GO15VENDOREXPERIMENT=1 gocyclo -over 65 *.go @GO15VENDOREXPERIMENT=1 gocyclo -over 65 pkg -build: getdeps verifiers - @echo "Installing minio:" #@GO15VENDOREXPERIMENT=1 deadcode +build: constants getdeps verifiers + @echo "Installing minio:" + +deadcode: + @GO15VENDOREXPERIMENT=1 deadcode test: build @echo "Running all testing:" @@ -49,13 +52,9 @@ test: build gomake-all: build @GO15VENDOREXPERIMENT=1 go install github.com/minio/minio -release: version - @echo "Installing minio (new version):" - @GO15VENDOREXPERIMENT=1 go install github.com/minio/minio - -version: - @echo "Generating new version.go" - @GO15VENDOREXPERIMENT=1 go run buildscripts/genversion.go +constants: + @echo "Generating new build-constants.go" + @GO15VENDOREXPERIMENT=1 go run buildscripts/gen-constants.go pkg-add: @GO15VENDOREXPERIMENT=1 govendor add $(PKG) @@ -70,6 +69,7 @@ install: gomake-all clean: @echo "Cleaning up all the generated files:" + @rm -fv build-constants.go @rm -fv cover.out @rm -fv minio @rm -fv minio.test diff --git a/build-constants.go b/build-constants.go new file mode 100644 index 000000000..ce3e77092 --- /dev/null +++ b/build-constants.go @@ -0,0 +1,14 @@ +// -------- DO NOT EDIT -------- +// This file is autogenerated by buildscripts/gen-constants.go during the release process. + +package main + +const ( + minioVersion = "UNOFFICIAL.GOGET" + minioReleaseTag = "UNOFFICIAL.GOGET" + minioCommitID = "UNOFFICIAL.GOGET" +) + +var ( + minioShortCommitID = minioCommitID[:] +) diff --git a/buildscripts/gen-constants.go b/buildscripts/gen-constants.go new file mode 100644 index 000000000..a3fb0a57c --- /dev/null +++ b/buildscripts/gen-constants.go @@ -0,0 +1,109 @@ +// +build ignore + +/* + * Minio Cloud Storage, (C) 2015 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "fmt" + "net/http" + "os" + "os/exec" + "strings" + "text/template" + "time" +) + +var constantsTemplate = `// -------- DO NOT EDIT -------- +// This file is autogenerated by buildscripts/gen-constants.go during the release process. + +package main + +const ( + minioVersion = {{if .Version}}"{{.Version}}"{{else}}""{{end}} + minioReleaseTag = {{if .ReleaseTag}}"{{.ReleaseTag}}"{{else}}""{{end}} + minioCommitID = {{if .CommitID}}"{{.CommitID}}"{{else}}""{{end}} +) + +var ( + minioShortCommitID = minioCommitID[:12] +) +` + +// genConstants generates ‘build-constants.go’. +func genConstants(version string) { + t := template.Must(template.New("constants").Parse(constantsTemplate)) + constantsFile, e := os.OpenFile("build-constants.go", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + if e != nil { + fmt.Printf("gen-constants: Unable to create ‘build-constants.go’. Error: %s.\n", e) + os.Exit(1) + } + defer constantsFile.Close() + + e = t.Execute(constantsFile, struct { + Version string + ReleaseTag string + CommitID string + }{version, releaseTag(version), commitID()}) + + if e != nil { + fmt.Printf("gen-constants: Unable to generate ‘build-constants.go’. Error: %s.\n", e) + os.Exit(1) + } +} + +// genReleaseTag prints release tag to the console for easy git tagging. +func releaseTag(version string) string { + relPrefix := "UNOFFICIAL" + if prefix := os.Getenv("MINIO_RELEASE"); prefix != "" { + relPrefix = prefix + } + + relTag := strings.Replace(version, " ", "-", -1) + relTag = strings.Replace(relTag, ":", "-", -1) + relTag = strings.Replace(relTag, ",", "", -1) + return relPrefix + "." + relTag +} + +// commitID returns the abbreviated commit-id hash of the last commit. +func commitID() string { + // git log --format="%h" -n1 + var ( + commit []byte + e error + ) + cmdName := "git" + cmdArgs := []string{"log", "--format=%H", "-n1"} + if commit, e = exec.Command(cmdName, cmdArgs...).Output(); e != nil { + fmt.Fprintln(os.Stderr, "Error generating git commit-id: ", e) + os.Exit(1) + } + + return strings.TrimSpace(string(commit)) +} + +func main() { + // Version is in HTTP TimeFormat. + version := time.Now().UTC().Format(http.TimeFormat) + + // generate ‘build-constants.go’ file. + genConstants(version) + + fmt.Println("Version: \"" + version + "\"") + fmt.Println("Release-Tag: " + releaseTag(version)) + fmt.Println("Commit-ID: " + commitID()) +} diff --git a/buildscripts/genversion.go b/buildscripts/genversion.go deleted file mode 100644 index bb3561241..000000000 --- a/buildscripts/genversion.go +++ /dev/null @@ -1,77 +0,0 @@ -// +build ignore - -/* - * Minio Cloud Storage, (C) 2015 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package main - -import ( - "fmt" - "net/http" - "os" - "strings" - "text/template" - "time" -) - -var versionTemplate = `// -------- DO NOT EDIT -------- -// This file is autogenerated by genversion.go during the release process. - -package main - -const minioVersion = {{if .Version}}"{{.Version}}"{{else}}""{{end}} -const minioReleaseTag = {{if .ReleaseTag}}"{{.ReleaseTag}}"{{else}}""{{end}} -` - -// genVersion generates ‘version.go’. -func genVersion(version string) { - t := template.Must(template.New("version").Parse(versionTemplate)) - versionFile, err := os.OpenFile("version.go", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) - if err != nil { - fmt.Printf("genversion: Unable to generate ‘version.go’. Error: %s.\n", err) - os.Exit(1) - } - defer versionFile.Close() - - err = t.Execute(versionFile, struct { - Version string - ReleaseTag string - }{version, genReleaseTag(version)}) - - if err != nil { - fmt.Printf("genversion: Unable to generate ‘version.go’. Error: %s.\n", err) - os.Exit(1) - } -} - -// genReleaseTag prints release tag to the console for easy git tagging. -func genReleaseTag(version string) string { - relTag := strings.Replace(version, " ", "-", -1) - relTag = strings.Replace(relTag, ":", "-", -1) - relTag = strings.Replace(relTag, ",", "", -1) - return "RELEASE." + relTag -} - -func main() { - // Version is in HTTP TimeFormat. - version := time.Now().UTC().Format(http.TimeFormat) - - // generate ‘version.go’ file. - genVersion(version) - - fmt.Println("Version: \"" + version + "\"") - fmt.Println("Release-Tag: " + genReleaseTag(version)) -} diff --git a/version-main.go b/version-main.go index febe09c76..e46f0d72a 100644 --- a/version-main.go +++ b/version-main.go @@ -20,7 +20,7 @@ import "github.com/minio/cli" var versionCmd = cli.Command{ Name: "version", - Usage: "Print version", + Usage: "Print version.", Action: mainVersion, CustomHelpTemplate: `NAME: minio {{.Name}} - {{.Usage}} @@ -33,4 +33,5 @@ USAGE: func mainVersion(ctxx *cli.Context) { Println("Version: " + minioVersion) Println("Release-Tag: " + minioReleaseTag) + Println("Commit-ID: " + minioCommitID) } diff --git a/version.go b/version.go deleted file mode 100644 index af50d592f..000000000 --- a/version.go +++ /dev/null @@ -1,7 +0,0 @@ -// -------- DO NOT EDIT -------- -// This file is autogenerated by genversion.go during the release process. - -package main - -const minioVersion = "Sun, 11 Oct 2015 06:14:24 GMT" -const minioReleaseTag = "RELEASE.Sun-11-Oct-2015-06-14-24-GMT"