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 }