Skip to content

Commit 06dbd49

Browse files
feat: handle allow-initial-development-versions correctly
1 parent f058d54 commit 06dbd49

File tree

3 files changed

+39
-22
lines changed

3 files changed

+39
-22
lines changed

cmd/semantic-release/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func cliHandler(c *cli.Context) error {
126126
exitIfError(err)
127127

128128
logger.Println("calculating new version...")
129-
newVer := semrel.GetNewVersion(commits, release)
129+
newVer := semrel.GetNewVersion(conf, commits, release)
130130
if newVer == nil {
131131
exitIfError(errors.New("no change"), 65)
132132
}

pkg/semrel/semrel.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"time"
1010

1111
"github.com/Masterminds/semver"
12+
"github.com/go-semantic-release/semantic-release/pkg/config"
1213
)
1314

1415
var commitPattern = regexp.MustCompile("^(\\w*)(?:\\((.*)\\))?\\: (.*)$")
@@ -113,7 +114,15 @@ func CalculateChange(commits []*Commit, latestRelease *Release) Change {
113114
return change
114115
}
115116

116-
func ApplyChange(version *semver.Version, change Change) *semver.Version {
117+
func ApplyChange(version *semver.Version, change Change, allowInitialDevelopmentVersions bool) *semver.Version {
118+
if !allowInitialDevelopmentVersions && version.Major() == 0 {
119+
change.Major = true
120+
}
121+
122+
if allowInitialDevelopmentVersions && version.Major() == 0 && version.Minor() == 0 {
123+
change.Minor = true
124+
}
125+
117126
if !change.Major && !change.Minor && !change.Patch {
118127
return nil
119128
}
@@ -147,8 +156,8 @@ func ApplyChange(version *semver.Version, change Change) *semver.Version {
147156
return &newVersion
148157
}
149158

150-
func GetNewVersion(commits []*Commit, latestRelease *Release) *semver.Version {
151-
return ApplyChange(latestRelease.Version, CalculateChange(commits, latestRelease))
159+
func GetNewVersion(conf *config.Config, commits []*Commit, latestRelease *Release) *semver.Version {
160+
return ApplyChange(latestRelease.Version, CalculateChange(commits, latestRelease), conf.AllowInitialDevelopmentVersions)
152161
}
153162

154163
func trimSHA(sha string) string {

pkg/semrel/semrel_test.go

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ package semrel
22

33
import (
44
"fmt"
5+
"github.com/go-semantic-release/semantic-release/pkg/config"
56
"strings"
67
"testing"
78

89
"github.com/Masterminds/semver"
910
)
1011

11-
func TestCaluclateChange(t *testing.T) {
12+
func TestCalculateChange(t *testing.T) {
1213
commits := []*Commit{
1314
{SHA: "a", Change: Change{true, false, false}},
1415
{SHA: "b", Change: Change{false, true, false}},
@@ -23,7 +24,7 @@ func TestCaluclateChange(t *testing.T) {
2324
t.Fail()
2425
}
2526
version, _ := semver.NewVersion("1.0.0")
26-
newVersion := GetNewVersion(commits, &Release{SHA: "b", Version: version})
27+
newVersion := GetNewVersion(&config.Config{}, commits, &Release{SHA: "b", Version: version})
2728
if newVersion.String() != "2.0.0" {
2829
t.Fail()
2930
}
@@ -36,25 +37,32 @@ func TestApplyChange(t *testing.T) {
3637
MajorChange := Change{true, true, true}
3738

3839
testCases := []struct {
39-
currentVersion string
40-
change Change
41-
expectedVersion string
40+
currentVersion string
41+
change Change
42+
expectedVersion string
43+
allowInitialDevelopmentVersions bool
4244
}{
4345
// No Previous Releases
44-
{"0.0.0", NoChange, "0.0.0"},
45-
{"0.0.0", PatchChange, "0.0.1"},
46-
{"0.0.0", MinorChange, "0.1.0"},
47-
{"0.0.0", MajorChange, "1.0.0"},
46+
{"0.0.0", NoChange, "1.0.0", false},
47+
{"0.0.0", PatchChange, "1.0.0", false},
48+
{"0.0.0", MinorChange, "1.0.0", false},
49+
{"0.0.0", MajorChange, "1.0.0", false},
4850

49-
{"1.0.0", NoChange, ""},
50-
{"1.0.0", PatchChange, "1.0.1"},
51-
{"1.0.0", MinorChange, "1.1.0"},
52-
{"1.0.0", MajorChange, "2.0.0"},
53-
{"0.1.0", NoChange, "1.0.0"},
51+
{"0.0.0", NoChange, "0.1.0", true},
52+
{"0.0.0", PatchChange, "0.1.0", true},
53+
{"0.0.0", MinorChange, "0.1.0", true},
54+
{"0.0.0", MajorChange, "1.0.0", true},
5455

55-
{"2.0.0-beta", MajorChange, "2.0.0-beta.1"},
56-
{"2.0.0-beta.2", MajorChange, "2.0.0-beta.3"},
57-
{"2.0.0-beta.1.1", MajorChange, "2.0.0-beta.2"},
56+
{"1.0.0", NoChange, "", false},
57+
{"1.0.0", PatchChange, "1.0.1", false},
58+
{"1.0.0", MinorChange, "1.1.0", false},
59+
{"1.0.0", MajorChange, "2.0.0", false},
60+
{"0.1.0", NoChange, "1.0.0", false},
61+
{"0.1.0", NoChange, "", true},
62+
63+
{"2.0.0-beta", MajorChange, "2.0.0-beta.1", false},
64+
{"2.0.0-beta.2", MajorChange, "2.0.0-beta.3", false},
65+
{"2.0.0-beta.1.1", MajorChange, "2.0.0-beta.2", false},
5866
}
5967

6068
for _, tc := range testCases {
@@ -65,7 +73,7 @@ func TestApplyChange(t *testing.T) {
6573
t.Errorf("failed to create version: %v", err)
6674
}
6775

68-
actual := ApplyChange(current, tc.change)
76+
actual := ApplyChange(current, tc.change, tc.allowInitialDevelopmentVersions)
6977

7078
// Handle no new version case
7179
if actual != nil && tc.expectedVersion != "" {

0 commit comments

Comments
 (0)