diff --git a/sv/formatter.go b/sv/formatter.go index d4ef8f2..abb9316 100644 --- a/sv/formatter.go +++ b/sv/formatter.go @@ -9,6 +9,7 @@ type releaseNoteTemplateVariables struct { Version string Date string Sections map[string]ReleaseNoteSection + Order []string BreakingChanges BreakingChangeSection } @@ -23,13 +24,13 @@ const ( rnSectionItem = "- {{if .Message.Scope}}**{{.Message.Scope}}:** {{end}}{{.Message.Description}} ({{.Hash}}){{if .Message.Metadata.issue}} ({{.Message.Metadata.issue}}){{end}}" - rnSection = `{{- if .}} + rnSection = `{{- if .}}{{- if ne .Name ""}} ### {{.Name}} {{range $k,$v := .Items}} {{template "rnSectionItem" $v}} {{- end}} -{{- end}}` +{{- end}}{{- end}}` rnSectionBreakingChanges = `{{- if ne .Name ""}} @@ -40,8 +41,10 @@ const ( {{- end}}` rnTemplate = `## {{if .Version}}v{{.Version}}{{end}}{{if and .Date .Version}} ({{end}}{{.Date}}{{if and .Version .Date}}){{end}} -{{- template "rnSection" .Sections.feat}} -{{- template "rnSection" .Sections.fix}} +{{- $sections := .Sections }} +{{- range $key := .Order }} +{{- template "rnSection" (index $sections $key) }} +{{- end}} {{- template "rnSectionBreakingChanges" .BreakingChanges}} ` ) @@ -101,6 +104,7 @@ func releaseNoteVariables(releasenote ReleaseNote) releaseNoteTemplateVariables Version: version, Date: date, Sections: releasenote.Sections, + Order: []string{"feat", "fix", "refactor", "perf", "test", "build", "ci", "chore", "docs", "style"}, BreakingChanges: releasenote.BreakingChanges, } } diff --git a/sv/formatter_test.go b/sv/formatter_test.go index 13f0a41..263e6d7 100644 --- a/sv/formatter_test.go +++ b/sv/formatter_test.go @@ -13,6 +13,24 @@ var emptyDateChangelog = `## v1.0.0 ` var emptyVersionChangelog = `## 2020-05-01 ` +var fullChangeLog = `## v1.0.0 (2020-05-01) + +### Features + +- subject text () + +### Bug Fixes + +- subject text () + +### Build + +- subject text () + +### Breaking Changes + +- break change message +` func TestOutputFormatterImpl_FormatReleaseNote(t *testing.T) { date, _ := time.Parse("2006-01-02", "2020-05-01") @@ -25,6 +43,7 @@ func TestOutputFormatterImpl_FormatReleaseNote(t *testing.T) { {"with date", emptyReleaseNote("1.0.0", date.Truncate(time.Minute)), dateChangelog}, {"without date", emptyReleaseNote("1.0.0", time.Time{}.Truncate(time.Minute)), emptyDateChangelog}, {"without version", emptyReleaseNote("", date.Truncate(time.Minute)), emptyVersionChangelog}, + {"full changelog", fullReleaseNote("1.0.0", date.Truncate(time.Minute)), fullChangeLog}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -45,3 +64,17 @@ func emptyReleaseNote(version string, date time.Time) ReleaseNote { Date: date, } } + +func fullReleaseNote(version string, date time.Time) ReleaseNote { + var v *semver.Version + if version != "" { + v = semver.MustParse(version) + } + + sections := map[string]ReleaseNoteSection{ + "build": newReleaseNoteSection("Build", []GitCommitLog{commitlog("build", map[string]string{})}), + "feat": newReleaseNoteSection("Features", []GitCommitLog{commitlog("feat", map[string]string{})}), + "fix": newReleaseNoteSection("Bug Fixes", []GitCommitLog{commitlog("fix", map[string]string{})}), + } + return releaseNote(v, date, sections, []string{"break change message"}) +}