package git import ( "os/exec" "strings" "errors" ) func CurrentTag() (tag string, err error) { return getTag("") } func PreviousTag(base string) (tag string, err error) { return getTag(base + "^") } func getTag(ref string) (tag string, err error) { cmd := exec.Command( "git", "describe", "--tags", "--abbrev=0", "--always", ) if ref != "" { cmd.Args = append(cmd.Args, ref) } bts, err := cmd.CombinedOutput() if err != nil { return tag, errors.New(err.Error() + ": " + string(bts)) } return strings.Split(string(bts), "\n")[0], err }