github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/fn/langs/ruby.go (about) 1 package langs 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "strings" 9 ) 10 11 type RubyLangHelper struct { 12 BaseHelper 13 } 14 15 func (lh *RubyLangHelper) Entrypoint() string { 16 return "ruby func.rb" 17 } 18 19 func (lh *RubyLangHelper) HasPreBuild() bool { 20 return true 21 } 22 23 func (lh *RubyLangHelper) PreBuild() error { 24 wd, err := os.Getwd() 25 if err != nil { 26 return err 27 } 28 29 if !exists(filepath.Join(wd, "Gemfile")) { 30 return nil 31 } 32 33 pbcmd := fmt.Sprintf("docker run --rm -v %s:/worker -w /worker iron/ruby:dev bundle install --standalone --clean", wd) 34 fmt.Println("Running prebuild command:", pbcmd) 35 parts := strings.Fields(pbcmd) 36 head := parts[0] 37 parts = parts[1:len(parts)] 38 cmd := exec.Command(head, parts...) 39 cmd.Stderr = os.Stderr 40 cmd.Stdout = os.Stdout 41 if err := cmd.Run(); err != nil { 42 return fmt.Errorf("error running docker build: %v", err) 43 } 44 return nil 45 } 46 47 func (lh *RubyLangHelper) AfterBuild() error { 48 return nil 49 } 50 51 func exists(name string) bool { 52 if _, err := os.Stat(name); err != nil { 53 if os.IsNotExist(err) { 54 return false 55 } 56 } 57 return true 58 }