mirror of
				https://github.com/minio/minio.git
				synced 2025-10-29 15:55:00 -04:00 
			
		
		
		
	Migrating minio server build to do 'go run make.go' style like mc
This commit is contained in:
		
							parent
							
								
									4998907835
								
							
						
					
					
						commit
						8bde4d4e34
					
				
							
								
								
									
										4
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							| @ -23,8 +23,8 @@ | |||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/minio/cli", | 			"ImportPath": "github.com/minio/cli", | ||||||
| 			"Comment": "1.2.0-111-g432a101", | 			"Comment": "1.2.0-112-g823349c", | ||||||
| 			"Rev": "432a1019ded42d1b34fb5f1aad60fb609245d5a1" | 			"Rev": "823349ce91e76834a4af0119d5bbc58fd4d2c6b0" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/stretchr/objx", | 			"ImportPath": "github.com/stretchr/objx", | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								Godeps/_workspace/src/github.com/minio/cli/app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								Godeps/_workspace/src/github.com/minio/cli/app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -198,7 +198,6 @@ func (a *App) Run(arguments []string) (err error) { | |||||||
| // RunAndExitOnError - Another entry point to the cli app, takes care of passing arguments and error handling | // RunAndExitOnError - Another entry point to the cli app, takes care of passing arguments and error handling | ||||||
| func (a *App) RunAndExitOnError() { | func (a *App) RunAndExitOnError() { | ||||||
| 	if err := a.Run(os.Args); err != nil { | 	if err := a.Run(os.Args); err != nil { | ||||||
| 		fmt.Fprintln(os.Stderr, err) |  | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								Makefile
									
									
									
									
									
								
							| @ -31,25 +31,20 @@ cyclo: | |||||||
| 	@echo "Running $@:" | 	@echo "Running $@:" | ||||||
| 	@test -z "$$(gocyclo -over 19 . | grep -v Godeps/_workspace/src/ | tee /dev/stderr)" | 	@test -z "$$(gocyclo -over 19 . | grep -v Godeps/_workspace/src/ | tee /dev/stderr)" | ||||||
| 
 | 
 | ||||||
| pre-build: | gomake-all: getdeps verifiers | ||||||
| 	@echo "Running pre-build:" |  | ||||||
| 
 |  | ||||||
| build-all: verifiers |  | ||||||
| 	@echo "Building Libraries:" |  | ||||||
| 	@godep go generate ./... |  | ||||||
| 	@godep go build -a ./... # have no stale packages |  | ||||||
| 
 |  | ||||||
| test-all: build-all |  | ||||||
| 	@echo "Running Test Suites:" |  | ||||||
| 	@godep go test -race ./... |  | ||||||
| 
 |  | ||||||
| test: test-all |  | ||||||
| 
 |  | ||||||
| minio: pre-build build-all test-all |  | ||||||
| 
 |  | ||||||
| install: minio |  | ||||||
| 	@echo "Installing minio:" | 	@echo "Installing minio:" | ||||||
| 	@godep go install -a -ldflags "-X main.BuildDate `go run buildscripts/date.go`" github.com/minio/minio | 	@go run make.go install | ||||||
|  | 
 | ||||||
|  | release: getdeps verifiers | ||||||
|  | 	@echo "Installing minio:" | ||||||
|  | 	@go run make.go release | ||||||
|  | 	@go run make.go install | ||||||
|  | 
 | ||||||
|  | godepupdate: | ||||||
|  | 	@for i in $(grep ImportPath Godeps/Godeps.json  | grep -v minio/minio | cut -f2 -d: | sed -e 's/,//' -e 's/^[ \t]*//' -e 's/[ \t]*$//' -e 's/\"//g'); do godep update $i; done | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | install: gomake-all | ||||||
| 
 | 
 | ||||||
| save: | save: | ||||||
| 	@godep save ./... | 	@godep save ./... | ||||||
| @ -65,3 +60,4 @@ clean: | |||||||
| 	@rm -fv cover.out | 	@rm -fv cover.out | ||||||
| 	@rm -fv pkg/utils/split/TESTPREFIX.* | 	@rm -fv pkg/utils/split/TESTPREFIX.* | ||||||
| 	@rm -fv minio | 	@rm -fv minio | ||||||
|  | 	@find Godeps -name "*.a" -type f -exec rm -vf {} \+ | ||||||
|  | |||||||
| @ -1,26 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Minio Client (C) 2014, 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" |  | ||||||
| 	"time" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	fmt.Println(time.Now().UTC().Format(time.RFC3339Nano)) |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"io" |  | ||||||
| 	"os" |  | ||||||
| 	"os/exec" |  | ||||||
| 
 |  | ||||||
| 	"crypto/md5" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // hashBinary computes MD5SUM of a binary file on disk |  | ||||||
| func hashBinary(progName string) (string, error) { |  | ||||||
| 	path, err := exec.LookPath(progName) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return "", err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	m := md5.New() |  | ||||||
| 
 |  | ||||||
| 	file, err := os.Open(path) // For read access. |  | ||||||
| 	if err != nil { |  | ||||||
| 		return "", err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	io.Copy(m, file) |  | ||||||
| 	return fmt.Sprintf("%x", m.Sum(nil)), nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // mustHashBinarySelf masks any error returned by hashBinary |  | ||||||
| func mustHashBinarySelf() string { |  | ||||||
| 	hash, _ := hashBinary(os.Args[0]) |  | ||||||
| 	return hash |  | ||||||
| } |  | ||||||
							
								
								
									
										63
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								main.go
									
									
									
									
									
								
							| @ -18,7 +18,6 @@ package main | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"net/http" |  | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/user" | 	"os/user" | ||||||
| 	"runtime" | 	"runtime" | ||||||
| @ -103,18 +102,6 @@ func getWebServerConfigFunc(c *cli.Context) server.StartServerFunc { | |||||||
| } | } | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| // Build date |  | ||||||
| var BuildDate string |  | ||||||
| 
 |  | ||||||
| // getBuildDate - |  | ||||||
| func getBuildDate() string { |  | ||||||
| 	t, _ := time.Parse(time.RFC3339Nano, BuildDate) |  | ||||||
| 	if t.IsZero() { |  | ||||||
| 		return "" |  | ||||||
| 	} |  | ||||||
| 	return t.Format(http.TimeFormat) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Tries to get os/arch/platform specific information | // Tries to get os/arch/platform specific information | ||||||
| // Returns a map of current os/arch/platform/memstats | // Returns a map of current os/arch/platform/memstats | ||||||
| func getSystemData() map[string]string { | func getSystemData() map[string]string { | ||||||
| @ -141,33 +128,6 @@ func getSystemData() map[string]string { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Version is based on MD5SUM of its binary |  | ||||||
| var Version = mustHashBinarySelf() |  | ||||||
| 
 |  | ||||||
| // Help template |  | ||||||
| var minioHelpTemplate = `NAME: |  | ||||||
|   {{.Name}} - {{.Usage}} |  | ||||||
| 
 |  | ||||||
| USAGE: |  | ||||||
|   {{.Name}} {{if .Flags}}[global flags] {{end}}command{{if .Flags}} [command flags]{{end}} [arguments...] |  | ||||||
| 
 |  | ||||||
| COMMANDS: |  | ||||||
|   {{range .Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}} |  | ||||||
|   {{end}}{{if .Flags}} |  | ||||||
| GLOBAL FLAGS: |  | ||||||
|   {{range .Flags}}{{.}} |  | ||||||
|   {{end}}{{end}} |  | ||||||
| VERSION: |  | ||||||
|   {{.Version}} |  | ||||||
|   {{if .Compiled}} |  | ||||||
| BUILD: |  | ||||||
|   {{.Compiled}}{{end}} |  | ||||||
|   {{range $key, $value := .ExtraInfo}} |  | ||||||
| {{$key}}: |  | ||||||
|   {{$value}} |  | ||||||
| {{end}} |  | ||||||
| ` |  | ||||||
| 
 |  | ||||||
| func main() { | func main() { | ||||||
| 	// set up iodine | 	// set up iodine | ||||||
| 	iodine.SetGlobalState("minio.version", Version) | 	iodine.SetGlobalState("minio.version", Version) | ||||||
| @ -180,7 +140,7 @@ func main() { | |||||||
| 	app := cli.NewApp() | 	app := cli.NewApp() | ||||||
| 	app.Name = "minio" | 	app.Name = "minio" | ||||||
| 	app.Version = Version | 	app.Version = Version | ||||||
| 	app.Compiled = getBuildDate() | 	app.Compiled = getVersion() | ||||||
| 	app.Author = "Minio.io" | 	app.Author = "Minio.io" | ||||||
| 	app.Usage = "Minimalist Object Storage" | 	app.Usage = "Minimalist Object Storage" | ||||||
| 	app.Flags = flags | 	app.Flags = flags | ||||||
| @ -191,6 +151,25 @@ func main() { | |||||||
| 		} | 		} | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 	app.CustomAppHelpTemplate = minioHelpTemplate | 	app.CustomAppHelpTemplate = `NAME: | ||||||
|  |   {{.Name}} - {{.Usage}} | ||||||
|  | 
 | ||||||
|  | USAGE: | ||||||
|  |   {{.Name}} {{if .Flags}}[global flags] {{end}}command{{if .Flags}} [command flags]{{end}} [arguments...] | ||||||
|  | 
 | ||||||
|  | COMMANDS: | ||||||
|  |   {{range .Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}} | ||||||
|  |   {{end}}{{if .Flags}} | ||||||
|  | GLOBAL FLAGS: | ||||||
|  |   {{range .Flags}}{{.}} | ||||||
|  |   {{end}}{{end}} | ||||||
|  | VERSION: | ||||||
|  |   {{if .Compiled}} | ||||||
|  |   {{.Compiled}}{{end}} | ||||||
|  |   {{range $key, $value := .ExtraInfo}} | ||||||
|  | {{$key}}: | ||||||
|  |   {{$value}} | ||||||
|  | {{end}} | ||||||
|  | ` | ||||||
| 	app.RunAndExitOnError() | 	app.RunAndExitOnError() | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										168
									
								
								make.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								make.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,168 @@ | |||||||
|  | // +build ignore | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  |  * Minio Client (C) 2014, 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 ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"fmt" | ||||||
|  | 	"os" | ||||||
|  | 	"os/exec" | ||||||
|  | 	"strconv" | ||||||
|  | 	"text/template" | ||||||
|  | 	"time" | ||||||
|  | 
 | ||||||
|  | 	"github.com/minio/cli" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Version struct { | ||||||
|  | 	Date string | ||||||
|  | 	Tag  string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func writeVersion(version Version) error { | ||||||
|  | 	var versionTemplate = `// --------  DO NOT EDIT -------- | ||||||
|  | // this is an autogenerated file | ||||||
|  | 
 | ||||||
|  | package main | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"net/http" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // Version autogenerated | ||||||
|  | var Version = {{if .Date}}"{{.Date}}"{{else}}""{{end}} | ||||||
|  | 
 | ||||||
|  | // Tag is of following format | ||||||
|  | // | ||||||
|  | //   [[STRING]-[EPOCH] | ||||||
|  | // | ||||||
|  | // STRING is release string of your choice. | ||||||
|  | // EPOCH is unix seconds since Jan 1, 1970 UTC. | ||||||
|  | var Tag = {{if .Tag}}"{{.Tag}}"{{else}}""{{end}} | ||||||
|  | 
 | ||||||
|  | // getVersion - | ||||||
|  | func getVersion() string { | ||||||
|  | 	t, _ := time.Parse(time.RFC3339Nano, Version) | ||||||
|  | 	if t.IsZero() { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return t.Format(http.TimeFormat) | ||||||
|  | } | ||||||
|  | ` | ||||||
|  | 	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 { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	defer versionFile.Close() | ||||||
|  | 	err = t.Execute(versionFile, version) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type command struct { | ||||||
|  | 	cmd    *exec.Cmd | ||||||
|  | 	stderr *bytes.Buffer | ||||||
|  | 	stdout *bytes.Buffer | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c command) runCommand() error { | ||||||
|  | 	c.cmd.Stdout = c.stdout | ||||||
|  | 	c.cmd.Stderr = c.stderr | ||||||
|  | 	return c.cmd.Run() | ||||||
|  | } | ||||||
|  | func (c command) String() string { | ||||||
|  | 	message := c.stderr.String() | ||||||
|  | 	message += c.stdout.String() | ||||||
|  | 	return message | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func runMinioInstall(ctx *cli.Context) { | ||||||
|  | 	if ctx.Args().First() == "help" { | ||||||
|  | 		cli.ShowCommandHelpAndExit(ctx, "install", 1) // last argument is exit code | ||||||
|  | 	} | ||||||
|  | 	minioGenerate := command{exec.Command("godep", "go", "generate", "./..."), &bytes.Buffer{}, &bytes.Buffer{}} | ||||||
|  | 	minioBuild := command{exec.Command("godep", "go", "build", "-a", "./..."), &bytes.Buffer{}, &bytes.Buffer{}} | ||||||
|  | 	minioTest := command{exec.Command("godep", "go", "test", "-race", "./..."), &bytes.Buffer{}, &bytes.Buffer{}} | ||||||
|  | 	minioInstall := command{exec.Command("godep", "go", "install", "-a", "github.com/minio/minio"), &bytes.Buffer{}, &bytes.Buffer{}} | ||||||
|  | 	minioGenerateErr := minioGenerate.runCommand() | ||||||
|  | 	if minioGenerateErr != nil { | ||||||
|  | 		fmt.Print(minioGenerate) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | 	fmt.Println(minioGenerate) | ||||||
|  | 	minioBuildErr := minioBuild.runCommand() | ||||||
|  | 	if minioBuildErr != nil { | ||||||
|  | 		fmt.Print(minioBuild) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | 	fmt.Print(minioBuild) | ||||||
|  | 	minioTestErr := minioTest.runCommand() | ||||||
|  | 	if minioTestErr != nil { | ||||||
|  | 		fmt.Println(minioTest) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | 	fmt.Print(minioTest) | ||||||
|  | 	minioInstallErr := minioInstall.runCommand() | ||||||
|  | 	if minioInstallErr != nil { | ||||||
|  | 		fmt.Println(minioInstall) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | 	fmt.Print(minioInstall) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func runMinioRelease(ctx *cli.Context) { | ||||||
|  | 	if ctx.Args().First() == "help" { | ||||||
|  | 		cli.ShowCommandHelpAndExit(ctx, "release", 1) // last argument is exit code | ||||||
|  | 	} | ||||||
|  | 	t := time.Now().UTC() | ||||||
|  | 	date := t.Format(time.RFC3339Nano) | ||||||
|  | 	//   [[STRING]-[EPOCH] | ||||||
|  | 	// | ||||||
|  | 	// STRING is release string of your choice. | ||||||
|  | 	// EPOCH is unix seconds since Jan 1, 1970 UTC. | ||||||
|  | 	tag := "release" + "-" + strconv.FormatInt(t.Unix(), 10) | ||||||
|  | 
 | ||||||
|  | 	version := Version{Date: date, Tag: tag} | ||||||
|  | 	err := writeVersion(version) | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Print(err) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func main() { | ||||||
|  | 	app := cli.NewApp() | ||||||
|  | 	app.Usage = "Minimalist Object Storage" | ||||||
|  | 	app.Commands = []cli.Command{ | ||||||
|  | 		{ | ||||||
|  | 			Name:   "release", | ||||||
|  | 			Action: runMinioRelease, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Name:   "install", | ||||||
|  | 			Action: runMinioInstall, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	app.Author = "Minio.io" | ||||||
|  | 	app.RunAndExitOnError() | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								version.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								version.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | // --------  DO NOT EDIT -------- | ||||||
|  | // this is an autogenerated file | ||||||
|  | 
 | ||||||
|  | package main | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"net/http" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // Version autogenerated | ||||||
|  | var Version = "2015-06-17T03:17:23.789648634Z" | ||||||
|  | 
 | ||||||
|  | // Tag is of following format | ||||||
|  | // | ||||||
|  | //   [[STRING]-[EPOCH] | ||||||
|  | // | ||||||
|  | // STRING is release string of your choice. | ||||||
|  | // EPOCH is unix seconds since Jan 1, 1970 UTC. | ||||||
|  | var Tag = "release-1434511043" | ||||||
|  | 
 | ||||||
|  | // getVersion - | ||||||
|  | func getVersion() string { | ||||||
|  | 	t, _ := time.Parse(time.RFC3339Nano, Version) | ||||||
|  | 	if t.IsZero() { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return t.Format(http.TimeFormat) | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user