in commands/action.go [595:673]
func getExec(args []string, params ActionFlags) (*whisk.Exec, error) {
var err error
var code string
var exec *whisk.Exec
exec = new(whisk.Exec)
kind := params.kind
isNative := params.native
docker := params.docker
mainEntry := params.main
ext := ""
if len(args) == 2 {
artifact := args[1]
ext = filepath.Ext(artifact)
code, err = ReadFile(artifact)
if err != nil {
whisk.Debug(whisk.DbgError, "ReadFile(%s) error: %s\n", artifact, err)
return nil, err
}
if ext == ZIP_EXT || ext == JAVA_EXT || ext == BAL_BIN_EXT {
code = base64.StdEncoding.EncodeToString([]byte(code))
}
exec.Code = &code
} else if len(args) == 1 && len(docker) == 0 {
return nil, noArtifactError()
} else if len(args) > 1 {
return nil, noArtifactError()
}
if len(kind) > 0 {
exec.Kind = kind
} else if len(docker) > 0 || isNative {
exec.Kind = BLACKBOX
if isNative {
exec.Image = "openwhisk/dockerskeleton"
} else {
exec.Image = docker
}
} else if ext == SWIFT_EXT {
exec.Kind = fmt.Sprintf("%s:%s", SWIFT, DEFAULT)
} else if ext == NODE_JS_EXT {
exec.Kind = fmt.Sprintf("%s:%s", NODE_JS, DEFAULT)
} else if ext == PYTHON_EXT {
exec.Kind = fmt.Sprintf("%s:%s", PYTHON, DEFAULT)
} else if ext == JAVA_EXT {
exec.Kind = fmt.Sprintf("%s:%s", JAVA, DEFAULT)
} else if ext == PHP_EXT {
exec.Kind = fmt.Sprintf("%s:%s", PHP, DEFAULT)
} else if ext == RUBY_EXT {
exec.Kind = fmt.Sprintf("%s:%s", RUBY, DEFAULT)
} else if ext == RUST_EXT {
exec.Kind = fmt.Sprintf("%s:%s", RUST, DEFAULT)
} else if ext == GO_EXT {
exec.Kind = fmt.Sprintf("%s:%s", GO, DEFAULT)
} else if ext == BAL_BIN_EXT {
exec.Kind = fmt.Sprintf("%s:%s", BAL, DEFAULT)
} else {
if ext == ZIP_EXT {
return nil, zipKindError()
} else {
return nil, extensionError(ext)
}
}
// Error if entry point is not specified for Java
if len(mainEntry) != 0 {
exec.Main = mainEntry
} else {
if exec.Kind == "java" {
return nil, javaEntryError()
}
}
return exec, nil
}