func (n *newCmd) configureSample( add *addCmd, name string, appConfig parsecli.AppConfig, args []string, e *parsecli.Env, ) error { if err := add.addSelectedApp(name, appConfig, args, e); err != nil { return err } masterKey, err := appConfig.GetMasterKey(e) if err != nil { return err } e.ParseAPIClient = e.ParseAPIClient.WithCredentials( parse.MasterKey{ ApplicationID: appConfig.GetApplicationID(), MasterKey: masterKey, }, ) if e.Type == parsecli.ParseFormat { return parsecmd.UseLatestJSSDK(e) } return nil }
func CloneSampleCloudCode( e *parsecli.Env, isNew, configOnly bool, appConfig parsecli.AppConfig) (bool, error) { dumpTemplate := false if !isNew && !configOnly { // if parse app was already created try to fetch Cloud Code and populate dir masterKey, err := appConfig.GetMasterKey(e) if err != nil { return false, err } e.ParseAPIClient = e.ParseAPIClient.WithCredentials( parse.MasterKey{ ApplicationID: appConfig.GetApplicationID(), MasterKey: masterKey, }, ) d := &downloadCmd{destination: e.Root} err = d.run(e, nil) if err != nil { if err == errNoFiles { dumpTemplate = true } else { fmt.Fprintln( e.Out, ` NOTE: If you like to fetch the latest deployed Cloud Code from Parse, you can use the "parse download" command after finishing the set up. This will download Cloud Code to a temporary location. `, ) } } } dumpTemplate = (isNew || dumpTemplate) && !configOnly return dumpTemplate, parsecli.CloneSampleCloudCode(e, dumpTemplate) }
func main() { // some parts of apps.go are unable to handle // interrupts, this logic ensures we exit on system interrupts interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) go func() { <-interrupt os.Exit(1) }() e := parsecli.Env{ Root: os.Getenv("PARSE_ROOT"), Server: os.Getenv("PARSE_SERVER"), ErrorStack: os.Getenv("PARSE_ERROR_STACK") == "1", ParserEmail: os.Getenv("PARSER_EMAIL"), Out: os.Stdout, Err: os.Stderr, In: os.Stdin, Exit: os.Exit, Clock: clock.New(), } if e.Root == "" { cur, err := os.Getwd() if err != nil { fmt.Fprintf(e.Err, "Failed to get current directory:\n%s\n", err) os.Exit(1) } root := parsecli.GetProjectRoot(&e, cur) if parsecli.IsProjectDir(root) { e.Root = root config, err := parsecli.ConfigFromDir(root) if err != nil { fmt.Fprintln(e.Err, err) os.Exit(1) } e.Type = config.GetProjectConfig().Type if e.ParserEmail == "" { e.ParserEmail = config.GetProjectConfig().ParserEmail } } else { e.Type = parsecli.LegacyParseFormat e.Root = parsecli.GetLegacyProjectRoot(&e, cur) } } if e.Type != parsecli.LegacyParseFormat && e.Type != parsecli.ParseFormat && e.Type != parsecli.HerokuFormat { fmt.Fprintf(e.Err, "Unknown project type %d.\n", e.Type) os.Exit(1) } if e.Server == "" { e.Server = parsecli.DefaultBaseURL } apiClient, err := parsecli.NewParseAPIClient(&e) if err != nil { fmt.Fprintln(e.Err, err) os.Exit(1) } e.ParseAPIClient = apiClient if e.Type == parsecli.HerokuFormat { apiClient, err := parsecli.NewHerokuAPIClient(&e) if err != nil { fmt.Fprintln(e.Err, err) os.Exit(1) } e.HerokuAPIClient = apiClient } var ( rootCmd *cobra.Command command []string ) switch e.Type { case parsecli.LegacyParseFormat, parsecli.ParseFormat: command, rootCmd = parseRootCmd(&e) case parsecli.HerokuFormat: command, rootCmd = herokuRootCmd(&e) } if len(command) == 0 || command[0] != "update" { message, err := checkIfSupported(&e, parsecli.Version, command...) if err != nil { fmt.Fprintln(e.Err, err) os.Exit(1) } if message != "" { fmt.Fprintln(e.Err, message) } } if err := rootCmd.Execute(); err != nil { // Error is already printed in Execute() os.Exit(1) } }