in openwhisk/initHandler.go [231:268]
func (ap *ActionProxy) ExtractAndCompile(buf *[]byte, main string) (string, error) {
// extract action in src folder
file, err := ap.ExtractAction(buf, "src")
if err != nil {
return "", err
}
if file == "" {
return "", fmt.Errorf("empty filename")
}
// some path surgery
dir := filepath.Dir(file)
parent := filepath.Dir(dir)
srcDir := filepath.Join(parent, "src")
binDir := filepath.Join(parent, "bin")
binFile := filepath.Join(binDir, "exec")
// if the file is already compiled or there is no compiler just move it from src to bin
if ap.compiler == "" || isCompiled(file) {
os.Rename(srcDir, binDir)
return binFile, nil
}
// ok let's try to compile
Debug("compiling: %s main: %s", file, main)
os.Mkdir(binDir, 0755)
err = ap.CompileAction(main, srcDir, binDir)
if err != nil {
return "", err
}
// check only if the file exist
if _, err := os.Stat(binFile); os.IsNotExist(err) {
return "", fmt.Errorf("cannot compile")
}
return binFile, nil
}