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  }