// rollback the function with optional version. func rollback(project *project.Project, name []string, version interface{}) { fn, err := project.FunctionByName(name[0]) if err != nil { log.Fatalf("error: %s", err) } if version == nil { err = fn.Rollback() } else { err = fn.RollbackVersion(version.(string)) } if err != nil { log.Fatalf("error: %s", err) } }
// build outputs the generated archive to stdout. func build(project *project.Project, name []string) { fn, err := project.FunctionByName(name[0]) if err != nil { log.Fatalf("error: %s", err) } zip, err := fn.Zip() if err != nil { log.Fatalf("error: %s", err) } _, err = io.Copy(os.Stdout, zip) if err != nil { log.Fatalf("error: %s", err) } }
// invoke reads request json from stdin and outputs the responses. func invoke(project *project.Project, name []string, verbose, async bool) { dec := json.NewDecoder(os.Stdin) kind := function.RequestResponse if async { kind = function.Event } fn, err := project.FunctionByName(name[0]) if err != nil { log.Fatalf("error: %s", err) } for { var v struct { Event interface{} Context interface{} } err := dec.Decode(&v) if err == io.EOF { break } if err != nil { log.Fatalf("error: %s", err) } reply, logs, err := fn.Invoke(v.Event, v.Context, kind) if err != nil { log.Fatalf("error: %s", err) } // TODO(tj) rename flag to --with-logs or --logs if verbose { io.Copy(os.Stderr, logs) } io.Copy(os.Stdout, reply) fmt.Fprintf(os.Stdout, "\n") } }