diff --git a/pkg/provider/git.go b/pkg/provider/git.go index de8e6c5dfb99790c3dbbe31e972f0c6912268b17..9eea764ba1bf034a12826c5e18dc3641a9d7dd72 100644 --- a/pkg/provider/git.go +++ b/pkg/provider/git.go @@ -164,8 +164,17 @@ func (repo *Repository) GetReleases(rawRe string) ([]*semrel.Release, error) { } func (repo *Repository) CreateRelease(release *provider.CreateReleaseConfig) error { + hash := plumbing.NewHash(release.SHA) + if hash.IsZero() { + // hash is not valid, let's assume it is a branch name + resolvedRef, err := repo.repo.Reference(plumbing.NewBranchReferenceName(release.SHA), true) + if err != nil { + return err + } + hash = resolvedRef.Hash() + } tag := fmt.Sprintf("v%s", release.NewVersion) - _, err := repo.repo.CreateTag(tag, plumbing.NewHash(release.SHA), &git.CreateTagOptions{ + _, err := repo.repo.CreateTag(tag, hash, &git.CreateTagOptions{ Message: release.Changelog, Tagger: &object.Signature{ Name: repo.taggerName, diff --git a/pkg/provider/git_test.go b/pkg/provider/git_test.go index 5aa188e1592fe33cd16728cab80fbbc79902f803..c60ae50a279e7fde5d3e6255c90bc8391b3874f8 100644 --- a/pkg/provider/git_test.go +++ b/pkg/provider/git_test.go @@ -181,20 +181,37 @@ func createRelease(t *testing.T) { head, err := gRepo.Head() require.NoError(err) - err = repo.CreateRelease(&provider.CreateReleaseConfig{ - NewVersion: "2.0.0", - SHA: head.Hash().String(), - Changelog: "new feature", - }) - require.NoError(err) + testCases := []struct { + version, sha, changelog string + }{ + { + version: "2.0.0", + sha: head.Hash().String(), + changelog: "new feature", + }, + { + version: "3.0.0", + sha: "master", + changelog: "breaking change", + }, + } - tagRef, err := gRepo.Tag("v2.0.0") - require.NoError(err) + for _, testCase := range testCases { + err = repo.CreateRelease(&provider.CreateReleaseConfig{ + NewVersion: testCase.version, + SHA: testCase.sha, + Changelog: testCase.changelog, + }) + require.NoError(err) - tagObj, err := gRepo.TagObject(tagRef.Hash()) - require.NoError(err) + tagRef, err := gRepo.Tag("v" + testCase.version) + require.NoError(err) - require.Equal("new feature\n", tagObj.Message) + tagObj, err := gRepo.TagObject(tagRef.Hash()) + require.NoError(err) + + require.Equal(testCase.changelog+"\n", tagObj.Message) + } } func getReleases(t *testing.T) {