github.com/rainforestapp/rainforest-cli@v2.12.0+incompatible/gittrigger.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "os/exec" 6 "regexp" 7 "strings" 8 ) 9 10 const gitTriggerString = "@rainforest" 11 12 type gitTrigger struct { 13 Trigger string 14 LastCommit string 15 } 16 17 func newGitTrigger() (gitTrigger, error) { 18 newGit := gitTrigger{Trigger: gitTriggerString} 19 err := newGit.getLatestCommit() 20 if err != nil { 21 return gitTrigger{}, err 22 } 23 return newGit, nil 24 } 25 26 func (g *gitTrigger) getLatestCommit() error { 27 cmd := exec.Command("git", "log", "-1", "--pretty=%B") 28 var out bytes.Buffer 29 cmd.Stdout = &out 30 err := cmd.Run() 31 if err != nil { 32 return err 33 } 34 g.LastCommit = strings.TrimSpace(out.String()) 35 return nil 36 } 37 38 func (g gitTrigger) checkTrigger() bool { 39 shouldTrigger := strings.Contains(g.LastCommit, g.Trigger) 40 return shouldTrigger 41 } 42 43 func (g gitTrigger) getTags() []string { 44 tagRegex, _ := regexp.Compile("#([\\w_-]+)") 45 foundTags := tagRegex.FindAllString(g.LastCommit, -1) 46 strippedTags := make([]string, len(foundTags)) 47 for i, tag := range foundTags { 48 strippedTags[i] = strings.Replace(tag, "#", "", 1) 49 } 50 return strippedTags 51 }