Add option to add links to changelog

Allows creating links in changelog, similar to what Github does
for markdown but works for dependencies as well.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
Derek McGowan
2018-08-28 17:49:35 -07:00
parent f76a5ec83a
commit 69e7c77e6a
2 changed files with 74 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ import (
"os"
"os/exec"
"path/filepath"
"regexp"
"sort"
"strings"
@@ -113,6 +114,26 @@ func getChangelog(previous, commit string) ([]byte, error) {
return git("log", "--oneline", gitChangeDiff(previous, commit))
}
func linkifyChanges(c []change, commit, msg func(change) (string, error)) error {
for i := range c {
commitLink, err := commit(c[i])
if err != nil {
return err
}
description, err := msg(c[i])
if err != nil {
return err
}
c[i].Commit = fmt.Sprintf("[`%s`](%s)", c[i].Commit, commitLink)
c[i].Description = description
}
return nil
}
func parseChangelog(changelog []byte) ([]change, error) {
var (
changes []change
@@ -282,3 +303,36 @@ func getTemplate(context *cli.Context) (string, error) {
}
return string(data), nil
}
func githubCommitLink(repo string) func(change) (string, error) {
return func(c change) (string, error) {
full, err := git("rev-parse", c.Commit)
if err != nil {
return "", err
}
commit := strings.TrimSpace(string(full))
return fmt.Sprintf("https://github.com/%s/commit/%s", repo, commit), nil
}
}
func githubPRLink(repo string) func(change) (string, error) {
r := regexp.MustCompile("^Merge pull request #[0-9]+")
return func(c change) (string, error) {
var err error
message := r.ReplaceAllStringFunc(c.Description, func(m string) string {
idx := strings.Index(m, "#")
pr := m[idx+1:]
// TODO: Validate links using github API
// TODO: Validate PR merged as commit hash
link := fmt.Sprintf("https://github.com/%s/pull/%s", repo, pr)
return fmt.Sprintf("%s [#%s](%s)", m[:idx], pr, link)
})
if err != nil {
return "", err
}
return message, nil
}
}