code: func (runner *Runner) detect() (string, string, string, bool) {
  	for _, buildpack := range runner.config.BuildpackOrder() {
  
  		buildpackPath, err := runner.buildpackPath(buildpack)
  		if err != nil {
  			printError(err.Error())
  			continue
  		}
  
  		if runner.config.SkipDetect() {
  			return buildpack, buildpackPath, "", true
  		}
  
  		if err := runner.warnIfDetectNotExecutable(buildpackPath); err != nil {
  			printError(err.Error())
  			continue
  		}
  
  		output := new(bytes.Buffer)
  		err = runner.run(exec.Command(filepath.Join(buildpackPath, "bin", "detect"), runner.config.BuildDir()), output)
  
  		if err == nil {
  			return buildpack, buildpackPath, strings.TrimRight(output.String(), "\r\n"), true
  		}
  	}
  
  	return "", "", "", false
  }
docs: // returns buildpack name,  buildpack path, buildpack detect output, ok