From 761c56a80581acf9efe55f1d09d965497a8eebfc Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 25 Nov 2020 03:39:59 +0100 Subject: [PATCH] fix: ensure changelog ends on a newline (#1919) --- internal/pipe/changelog/changelog.go | 4 ++++ internal/pipe/changelog/changelog_test.go | 27 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/internal/pipe/changelog/changelog.go b/internal/pipe/changelog/changelog.go index eea669d7800..f9d72d8df36 100644 --- a/internal/pipe/changelog/changelog.go +++ b/internal/pipe/changelog/changelog.go @@ -104,7 +104,11 @@ func (Pipe) Run(ctx *context.Context) error { if len(ctx.ReleaseFooter) > 0 { changelogElements = append(changelogElements, ctx.ReleaseFooter) } + ctx.ReleaseNotes = strings.Join(changelogElements, "\n\n") + if !strings.HasSuffix(ctx.ReleaseNotes, "\n") { + ctx.ReleaseNotes += "\n" + } var path = filepath.Join(ctx.Config.Dist, "CHANGELOG.md") log.WithField("changelog", path).Info("writing") diff --git a/internal/pipe/changelog/changelog_test.go b/internal/pipe/changelog/changelog_test.go index bda97bbc0a8..a2f1394ddc9 100644 --- a/internal/pipe/changelog/changelog_test.go +++ b/internal/pipe/changelog/changelog_test.go @@ -406,6 +406,7 @@ func TestChangeLogWithReleaseFooter(t *testing.T) { require.NoError(t, Pipe{}.Run(ctx)) require.Contains(t, ctx.ReleaseNotes, "## Changelog") require.Contains(t, ctx.ReleaseNotes, "test footer") + require.Equal(t, rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1]), '\n') } func TestChangeLogWithTemplatedReleaseFooter(t *testing.T) { @@ -432,4 +433,30 @@ func TestChangeLogWithTemplatedReleaseFooter(t *testing.T) { require.NoError(t, Pipe{}.Run(ctx)) require.Contains(t, ctx.ReleaseNotes, "## Changelog") require.Contains(t, ctx.ReleaseNotes, "test footer with tag v0.0.1") + require.Equal(t, rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1]), '\n') +} + +func TestChangeLogWithoutReleaseFooter(t *testing.T) { + current, err := os.Getwd() + require.NoError(t, err) + tmpdir, back := testlib.Mktmp(t) + defer back() + require.NoError(t, os.Symlink(current+"/testdata", tmpdir+"/testdata")) + testlib.GitInit(t) + var msgs = []string{ + "initial commit", + "another one", + "one more", + "and finally this one", + } + for _, msg := range msgs { + testlib.GitCommit(t, msg) + } + testlib.GitTag(t, "v0.0.1") + testlib.GitCheckoutBranch(t, "v0.0.1") + var ctx = context.New(config.Project{}) + ctx.Git.CurrentTag = "v0.0.1" + require.NoError(t, Pipe{}.Run(ctx)) + require.Contains(t, ctx.ReleaseNotes, "## Changelog") + require.Equal(t, rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1]), '\n') }