// Run adds the shim when runtime is "golang". func (p *Plugin) Run(hook function.Hook, fn *function.Function) error { if hook != function.OpenHook || fn.Runtime != "golang" { return nil } fn.Shim = true fn.Runtime = "nodejs" fn.Hooks.Build = "GOOS=linux GOARCH=amd64 go build -o main main.go" fn.Hooks.Clean = "rm -f main" return nil }
// Open adds python defaults. func (p *Plugin) Open(fn *function.Function) error { if fn.Runtime != "python" { return nil } fn.Runtime = "python2.7" if fn.Handler == "" { fn.Handler = "main.handle" } return nil }
// Open adds python defaults. func (p *Plugin) Open(fn *function.Function) error { if fn.Runtime != Runtime { return nil } fn.Runtime = RuntimeCanonical if fn.Handler == "" { fn.Handler = "main.handle" } return nil }
// Run specifies python defaults. func (p *Plugin) Run(hook function.Hook, fn *function.Function) error { if hook != function.OpenHook || fn.Runtime != "python" { return nil } fn.Runtime = "python2.7" if fn.Handler == "" { fn.Handler = "main.handle" } return nil }
// Open adds the shim and golang defaults. func (p *Plugin) Open(fn *function.Function) error { if fn.Runtime != Runtime { return nil } if fn.Hooks.Build == "" { fn.Hooks.Build = "GOOS=linux GOARCH=amd64 go build -o main main.go" } fn.Shim = true fn.Runtime = nodejs.Runtime fn.Hooks.Clean = "rm -f main" return nil }
// Open adds java defaults. func (p *Plugin) Open(fn *function.Function) error { if fn.Runtime != Runtime { return nil } fn.Runtime = RuntimeCanonical if fn.Handler == "" { fn.Handler = "lambda.Main::handler" } fn.Hooks.Clean = "mvn clean" return nil }
// Build injects a script for loading the environment. func (p *Plugin) Build(fn *function.Function, zip *archive.Archive) error { if len(fn.Environment) == 0 { return nil } fn.Log.Debug("injecting prelude") var buf bytes.Buffer file := strings.Split(fn.Handler, ".")[0] method := strings.Split(fn.Handler, ".")[1] err := prelude.Execute(&buf, struct { EnvFile string HandleFile string HandleMethod string }{ EnvFile: ".env.json", HandleFile: file, HandleMethod: method, }) if err != nil { return err } fn.Handler = "_apex_index.handle" return zip.AddBytes("_apex_index.js", buf.Bytes()) }
// Build injects a script for loading the environment. func (p *Plugin) Build(fn *function.Function, zip *archive.Archive) error { if fn.Runtime != RuntimeCanonical || len(fn.Environment) == 0 { return nil } fn.Log.Debug("injecting prelude") var buf bytes.Buffer file := strings.Split(fn.Handler, ".")[0] method := strings.Split(fn.Handler, ".")[1] err := prelude.Execute(&buf, struct { EnvFile string HandleFile string HandleMethod string }{ EnvFile: env.FileName, HandleFile: file, HandleMethod: method, }) if err != nil { return err } fn.Handler = "_apex_main.handle" return zip.AddBytesMTime("_apex_main.py", buf.Bytes(), time.Unix(0, 0)) }
// Build injects a script for loading the environment. func (p *Plugin) Build(fn *function.Function, zip *archive.Zip) error { if fn.Runtime != RuntimeCanonical || len(fn.Environment) == 0 { return nil } if len(strings.Split(fn.Handler, ".")) < 2 { return errors.New("lambda requires handler function name to be of the format 'filename.function_name'") } fn.Log.Debug("injecting prelude") var buf bytes.Buffer file := strings.Split(fn.Handler, ".")[0] method := strings.Split(fn.Handler, ".")[1] err := prelude.Execute(&buf, struct { EnvFile string HandleFile string HandleMethod string }{ EnvFile: env.FileName, HandleFile: file, HandleMethod: method, }) if err != nil { return err } fn.Handler = "_apex_main." + method return zip.AddBytes("_apex_main.py", buf.Bytes()) }
// Open adds java defaults. No clean operation is implemented, as it is // assumed that the build tool generating the fat JAR will handle that workflow // on its own. func (p *Plugin) Open(fn *function.Function) error { if fn.Runtime != Runtime { return nil } if fn.Handler == "" { fn.Handler = "lambda.Main::handler" } if len(fn.IgnoreFile) == 0 { // Since we're deploying a fat jar, we don't need anything else. fn.IgnoreFile = []byte(` * !**/apex.jar `) } return nil }
// Open adds nodejs defaults. func (p *Plugin) Open(fn *function.Function) error { if fn.Runtime != "nodejs" { return nil } if fn.Handler == "" { fn.Handler = "index.handle" } return nil }
// Run specifies nodejs defaults. func (p *Plugin) Run(hook function.Hook, fn *function.Function) error { if hook != function.OpenHook || fn.Runtime != "nodejs" { return nil } if fn.Handler == "" { fn.Handler = "index.handle" } return nil }
// Open adds nodejs defaults. func (p *Plugin) Open(fn *function.Function) error { if !p.runtimeSupported(fn) { return nil } if fn.Handler == "" { fn.Handler = "index.handle" } return nil }
// Run checks for files in the function directory to infer its runtime. func (p *Plugin) Run(hook function.Hook, fn *function.Function) error { if hook != function.OpenHook || fn.Runtime != "" { return nil } fn.Log.Debug("inferring runtime") for name, runtime := range p.Files { if _, err := os.Stat(filepath.Join(fn.Path, name)); err == nil { fn.Log.WithField("runtime", runtime).Debug("inferred runtime") fn.Runtime = runtime return nil } } return nil }
// Build adds the jar contents to zipfile. func (p *Plugin) Build(fn *function.Function, zip *archive.Zip) error { if fn.Runtime != Runtime { return nil } fn.Runtime = RuntimeCanonical fn.Log.Debugf("searching for JAR (%s) in directories: %s", jarFile, strings.Join(jarSearchPaths, ", ")) expectedJarPath := findJar(fn.Path) if expectedJarPath == "" { return errors.New("Expected jar file not found") } fn.Log.Debugf("found jar path: %s", expectedJarPath) fn.Log.Debug("appending compiled files") reader, err := azip.OpenReader(expectedJarPath) if err != nil { return err } defer reader.Close() for _, file := range reader.File { r, err := file.Open() if err != nil { return err } b, err := ioutil.ReadAll(r) if err != nil { return err } r.Close() zip.AddBytes(file.Name, b) } return nil }