Skip to content

Commit 27e9eac

Browse files
authored
fix: wrong increments detected (#36)
1 parent 938636c commit 27e9eac

File tree

3 files changed

+86
-26
lines changed

3 files changed

+86
-26
lines changed

internal/git/mod.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,11 @@ func PushToOrigin(repo *Repository, auth AuthMethod) error {
137137
pushOpts := &git.PushOptions{
138138
RemoteName: "origin",
139139
Progress: os.Stdout,
140-
RefSpecs: []config.RefSpec{
140+
RefSpecs: []config.RefSpec{
141141
config.RefSpec("refs/heads/*:refs/heads/*"),
142142
config.RefSpec("refs/tags/*:refs/tags/*"),
143143
},
144-
Auth: auth,
144+
Auth: auth,
145145
}
146146

147147
if err := repo.Push(pushOpts); err != nil {

pkg/gitsemver/project.go

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ const (
2323
)
2424

2525
var (
26-
breaking = regexp.MustCompile("(?im).*breaking change:.*")
27-
breakingBang = regexp.MustCompile(`(?im).*(\w+)(\(.*\))?!:.*`)
28-
feature = regexp.MustCompile(`(?im).*feat(\(.*\))?:.*`)
29-
patch = regexp.MustCompile(`(?im).*fix(\(.*\))?:.*`)
26+
breaking = regexp.MustCompile("(?im)^breaking change:.*")
27+
breakingBang = regexp.MustCompile(`(?i)^(\w+)(\(.*\))?!:.*`)
28+
feature = regexp.MustCompile(`(?i)^feat(\(.*\))?:.*`)
29+
patch = regexp.MustCompile(`(?i)^fix(\(.*\))?:.*`)
3030
)
3131

3232
type Project struct {
@@ -190,26 +190,9 @@ func (p *Project) NextVersionIncrement() (Increment, error) {
190190
}
191191
}
192192

193-
var increment = None
194-
195-
for _, commit := range commits {
196-
commitIncrement := None
197-
198-
if breaking.MatchString(commit.Message) || breakingBang.MatchString(commit.Message) {
199-
commitIncrement = Major
200-
}
201-
202-
if feature.MatchString(commit.Message) {
203-
commitIncrement = Minor
204-
}
205-
206-
if patch.MatchString(commit.Message) {
207-
commitIncrement = Patch
208-
}
209-
210-
if commitIncrement > increment {
211-
increment = commitIncrement
212-
}
193+
increment, err := resolveIncrement(commits)
194+
if err != nil {
195+
return None, err
213196
}
214197

215198
return increment, nil
@@ -265,3 +248,29 @@ func TagNameFromProjectAndVersion(p *Project, v *semver.Version) string {
265248

266249
return v.Original()
267250
}
251+
252+
func resolveIncrement(commits []*git.Commit) (Increment, error) {
253+
var increment = None
254+
255+
for _, commit := range commits {
256+
commitIncrement := None
257+
258+
if breaking.MatchString(commit.Message) || breakingBang.MatchString(commit.Message) {
259+
commitIncrement = Major
260+
}
261+
262+
if feature.MatchString(commit.Message) {
263+
commitIncrement = Minor
264+
}
265+
266+
if patch.MatchString(commit.Message) {
267+
commitIncrement = Patch
268+
}
269+
270+
if commitIncrement > increment {
271+
increment = commitIncrement
272+
}
273+
}
274+
275+
return increment, nil
276+
}

pkg/gitsemver/project_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package gitsemver
2+
3+
import (
4+
"testing"
5+
6+
"github.com/go-git/go-git/v5/plumbing/object"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestIncrementMajor(t *testing.T) {
11+
testCommitIncrement(t, "feat!: test", Major)
12+
testCommitIncrement(t, "fix!: test", Major)
13+
testCommitIncrement(t, "any!: test", Major)
14+
testCommitIncrement(t, "breaking change: test", Major)
15+
testCommitIncrement(t, "BREAKING CHANGE: test", Major)
16+
testCommitIncrement(t, `some comment
17+
breaking change: test
18+
`, Major)
19+
}
20+
21+
func TestIncremenMinor(t *testing.T) {
22+
testCommitIncrement(t, "feat: test", Minor)
23+
}
24+
25+
func TestIncremenPatch(t *testing.T) {
26+
testCommitIncrement(t, "fix: test", Patch)
27+
}
28+
29+
func TestIncremenNone(t *testing.T) {
30+
testCommitIncrement(t, "docs: test", None)
31+
testCommitIncrement(t, "rand: test", None)
32+
testCommitIncrement(t, "rand: with feat: inside", None)
33+
}
34+
35+
func TestIncremeWithScope(t *testing.T) {
36+
testCommitIncrement(t, "docs(README): test", None)
37+
testCommitIncrement(t, "feat(login)!: test", Major)
38+
testCommitIncrement(t, "feat(users): test", Minor)
39+
testCommitIncrement(t, "fix(orders): test", Patch)
40+
}
41+
42+
func testCommitIncrement(t *testing.T, msg string, expected Increment) {
43+
commits := []*object.Commit{{Message: msg}}
44+
45+
increment, err := resolveIncrement(commits)
46+
if err != nil {
47+
t.Error(err)
48+
}
49+
50+
assert.Equal(t, expected, increment)
51+
}

0 commit comments

Comments
 (0)