releaser-pleaser/internal/changelog/changelog.go

55 lines
1.1 KiB
Go
Raw Normal View History

2024-08-30 22:47:50 +02:00
package changelog
2024-07-12 15:56:50 +02:00
import (
"bytes"
2024-07-15 16:45:03 +02:00
_ "embed"
2024-07-12 15:56:50 +02:00
"html/template"
"log"
2024-08-30 22:47:50 +02:00
"github.com/apricote/releaser-pleaser/internal/commitparser"
2024-07-15 16:45:03 +02:00
)
2024-07-12 15:56:50 +02:00
var (
changelogTemplate *template.Template
)
2024-07-15 16:45:03 +02:00
//go:embed changelog.md.tpl
var rawChangelogTemplate string
2024-07-12 15:56:50 +02:00
func init() {
var err error
2024-07-15 16:45:03 +02:00
changelogTemplate, err = template.New("changelog").Parse(rawChangelogTemplate)
2024-07-12 15:56:50 +02:00
if err != nil {
log.Fatalf("failed to parse changelog template: %v", err)
}
}
2024-08-30 22:47:50 +02:00
func NewChangelogEntry(commits []commitparser.AnalyzedCommit, version, link, prefix, suffix string) (string, error) {
features := make([]commitparser.AnalyzedCommit, 0)
fixes := make([]commitparser.AnalyzedCommit, 0)
2024-07-12 15:56:50 +02:00
for _, commit := range commits {
switch commit.Type {
case "feat":
features = append(features, commit)
case "fix":
fixes = append(fixes, commit)
2024-07-12 15:56:50 +02:00
}
}
var changelog bytes.Buffer
err := changelogTemplate.Execute(&changelog, map[string]any{
"Features": features,
"Fixes": fixes,
"Version": version,
"VersionLink": link,
"Prefix": prefix,
"Suffix": suffix,
2024-07-12 15:56:50 +02:00
})
if err != nil {
return "", err
}
return changelog.String(), nil
}