From e5d117b91b4da78dcb87ae6d38b66b88e67cb852 Mon Sep 17 00:00:00 2001 From: Christoph Witzko <github@christophwitzko.com> Date: Sun, 21 Nov 2021 15:36:29 +0100 Subject: [PATCH] fix(create-release): try to resolve branch name if invalid sha is provided fixes #4 --- pkg/provider/git.go | 11 ++++++++++- pkg/provider/git_test.go | 39 ++++++++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/pkg/provider/git.go b/pkg/provider/git.go index de8e6c5..9eea764 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 5aa188e..c60ae50 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) { -- GitLab