// +build ignore /* * Makefile alternative for Minimalist Object 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 ( "bytes" "flag" "fmt" "os" "os/exec" "text/template" "time" ) type Version struct { Date 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}} // 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 runDonutInstall() { donutInstall := command{exec.Command("godep", "go", "install", "-a", "github.com/minio/minio/cmd/donut"), &bytes.Buffer{}, &bytes.Buffer{}} donutInstallErr := donutInstall.runCommand() if donutInstallErr != nil { fmt.Println(donutInstall) os.Exit(1) } fmt.Print(donutInstall) } func runDonutRelease() { t := time.Now().UTC() date := t.Format(time.RFC3339Nano) version := Version{Date: date} err := writeVersion(version) if err != nil { fmt.Print(err) os.Exit(1) } } func main() { releaseFlag := flag.Bool("release", false, "make a release") installFlag := flag.Bool("install", false, "install donut") flag.Parse() if *releaseFlag { runDonutRelease() } if *installFlag { runDonutInstall() } }