Use github markdown converter to render links correctly (#292)

This commit is contained in:
andig 2020-08-17 10:37:36 +02:00 • committed by GitHub
parent 81c4bf09da
commit 89695b2d9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 26 deletions

1
go.mod
View file

@ -35,7 +35,6 @@ require (
github.com/spf13/viper v1.7.1
github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e
github.com/volkszaehler/mbmd v0.0.0-20200804054214-122815825570
github.com/yuin/goldmark v1.1.32
golang.org/x/net v0.0.0-20200707034311-ab3426394381
golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c

View file

@ -12,9 +12,6 @@ import (
"github.com/google/go-github/v32/github"
"github.com/hashicorp/go-version"
latest "github.com/tcnksm/go-latest"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/renderer/html"
)
var instance *updater
@ -67,18 +64,18 @@ func (u *updater) checkVersion() {
Val: tag,
}
u.fetchReleaseNotes(res.Current)
u.fetchReleaseNotes()
} else {
u.log.ERROR.Println("version check failed:", err)
}
}
// fetchReleaseNotes retrieves release notes up to semver and sends to client
func (u *updater) fetchReleaseNotes(to string) {
func (u *updater) fetchReleaseNotes() {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if notes, err := releaseNotes(ctx, tag2semver(server.Version), to); err == nil {
if notes, err := releaseNotes(ctx, tag2semver(server.Version)); err == nil {
u.cache <- util.Param{
Key: "releaseNotes",
Val: notes,
@ -89,14 +86,11 @@ func (u *updater) fetchReleaseNotes(to string) {
}
// releaseNotes returns github release notes for the (from,to] semver interval
func releaseNotes(ctx context.Context, from, to string) (rendered string, err error) {
var fromVersion, toVersion *version.Version
func releaseNotes(ctx context.Context, from string) (rendered string, err error) {
var fromVersion *version.Version
if fromVersion, err = version.NewVersion(from); err != nil {
return
}
if toVersion, err = version.NewVersion(to); err != nil {
return
}
client := github.NewClient(nil)
releases, _, err := client.Repositories.ListReleases(ctx, server.Owner, server.Repository, nil)
@ -104,12 +98,7 @@ func releaseNotes(ctx context.Context, from, to string) (rendered string, err er
return
}
notes := bytes.NewBuffer([]byte{})
gm := goldmark.New(
goldmark.WithExtensions(extension.GFM),
goldmark.WithRendererOptions(html.WithHardWraps()),
)
history := bytes.NewBuffer([]byte{})
for _, rel := range releases {
tag := *rel.TagName
@ -118,18 +107,23 @@ func releaseNotes(ctx context.Context, from, to string) (rendered string, err er
return
}
if ver.GreaterThan(fromVersion) && ver.LessThanOrEqual(toVersion) {
body := strings.TrimSpace(rel.GetBody())
if body == "" {
continue
}
if ver.LessThanOrEqual(fromVersion) {
continue
}
notes.WriteString(fmt.Sprintf("<h1>%s</h1>\n", tag))
if err = gm.Convert([]byte(body), notes); err != nil {
if notes := strings.TrimSpace(rel.GetBody()); notes != "" {
var md string
if md, _, err = client.Markdown(context.Background(), notes, &github.MarkdownOptions{
Mode: "gfm",
Context: fmt.Sprintf("%s/%s", server.Owner, server.Repository),
}); err != nil {
return
}
history.WriteString(fmt.Sprintf("<h1>%s</h1>\n", tag))
history.WriteString(md)
}
}
return notes.String(), nil
return history.String(), nil
}