github.com/kilianc/pretender@v1.7.0/tools/commitcheck/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/exec"
     7  	"regexp"
     8  	"strings"
     9  )
    10  
    11  var (
    12  	regexpStr = `^(feat|fix|chore)(\(.+\))?: [a-z].+`
    13  	re        = regexp.MustCompile(regexpStr)
    14  )
    15  
    16  func main() {
    17  	message := ""
    18  
    19  	if len(os.Args) > 1 {
    20  		message = os.Args[1]
    21  	}
    22  
    23  	if message == "" {
    24  		commit, err := exec.Command("git", "log", "-1", "--pretty=%B").Output()
    25  		if err != nil {
    26  			fmt.Fprintf(os.Stderr, "\033[91m✘ error: git log -1 --pretty=%%B: %v\033[0m\n\n", err)
    27  			os.Exit(1)
    28  		}
    29  
    30  		message = strings.Trim(string(commit), "\n")
    31  	}
    32  
    33  	if !isValid(message) {
    34  		fmt.Fprintf(os.Stderr, "\033[91m✘ error: message %q does not match %s\033[0m\n\n", message, regexpStr)
    35  		os.Exit(1)
    36  	}
    37  
    38  	fmt.Fprintf(os.Stderr, "\033[92m✔ commit message %q is valid\033[0m\n", message)
    39  }
    40  
    41  func isValid(message string) bool {
    42  	return re.Match([]byte(message))
    43  }