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  }