| // Copyright 2015 Google Inc. All rights reserved. | |
| // Use of this source code is governed by the Apache 2.0 | |
| // license that can be found in the LICENSE file. | |
| // Program aedeploy assists with deploying App Engine "flexible environment" Go apps to production. | |
| // A temporary directory is created; the app, its subdirectories, and all its | |
| // dependencies from $GOPATH are copied into the directory; then the app | |
| // is deployed to production with the provided command. | |
| // | |
| // The app must be in "package main". | |
| // | |
| // This command must be issued from within the root directory of the app | |
| // (where the app.yaml file is located). | |
| package main | |
| import ( | |
| "flag" | |
| "fmt" | |
| "log" | |
| "os" | |
| "os/exec" | |
| "strings" | |
| ) | |
| func usage() { | |
| fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) | |
| fmt.Fprintf(os.Stderr, "\t%s gcloud --verbosity debug app deploy --version myversion ./app.yaml\tDeploy app to production\n", os.Args[0]) | |
| } | |
| var verbose bool | |
| // vlogf logs to stderr if the "-v" flag is provided. | |
| func vlogf(f string, v ...interface{}) { | |
| if !verbose { | |
| return | |
| } | |
| log.Printf("[aedeploy] "+f, v...) | |
| } | |
| func main() { | |
| flag.BoolVar(&verbose, "v", false, "Verbose logging.") | |
| flag.Usage = usage | |
| flag.Parse() | |
| if flag.NArg() < 1 { | |
| usage() | |
| os.Exit(1) | |
| } | |
| notice := func() { | |
| fmt.Fprintln(os.Stderr, `NOTICE: aedeploy is deprecated. Just use "gcloud app deploy".`) | |
| } | |
| notice() | |
| if err := deploy(); err != nil { | |
| fmt.Fprintf(os.Stderr, os.Args[0]+": Error: %v\n", err) | |
| notice() | |
| fmt.Fprintln(os.Stderr, `You might need to update gcloud. Run "gcloud components update".`) | |
| os.Exit(1) | |
| } | |
| notice() // Make sure they see it at the end. | |
| } | |
| // deploy calls the provided command to deploy the app from the temporary directory. | |
| func deploy() error { | |
| vlogf("Running command %v", flag.Args()) | |
| cmd := exec.Command(flag.Arg(0), flag.Args()[1:]...) | |
| cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr | |
| if err := cmd.Run(); err != nil { | |
| return fmt.Errorf("unable to run %q: %v", strings.Join(flag.Args(), " "), err) | |
| } | |
| return nil | |
| } |