From 81aea8399625622808d83339eeca7c44095fbe8a Mon Sep 17 00:00:00 2001
From: Christoph Witzko <github@christophwitzko.com>
Date: Sun, 13 Mar 2022 14:50:05 +0100
Subject: [PATCH] fix: if allowInitialDevelopmentVersions is set the major
 version should never be updated

---
 pkg/config/config.go      | 2 +-
 pkg/semrel/semrel.go      | 6 ++++++
 pkg/semrel/semrel_test.go | 7 ++++++-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/pkg/config/config.go b/pkg/config/config.go
index 455f384..013fc2d 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -179,7 +179,7 @@ func SetFlags(cmd *cobra.Command) {
 	cmd.Flags().Bool("ghr", false, "create a .ghr file with the parameters for ghr")
 	cmd.Flags().Bool("no-ci", false, "run semantic-release locally")
 	cmd.Flags().Bool("dry", false, "do not create release")
-	cmd.Flags().Bool("allow-initial-development-versions", false, "semantic-release will start your initial development release at 0.1.0")
+	cmd.Flags().Bool("allow-initial-development-versions", false, "semantic-release will start your initial development release at 0.1.0 and will handle breaking changes as minor version updates. This option will be ignored if a release with major version greater than or equal 1 exists.")
 	cmd.Flags().Bool("allow-no-changes", false, "exit with code 0 if no changes are found, useful if semantic-release is automatically run")
 	cmd.Flags().Bool("force-bump-patch-version", false, "increments the patch version if no changes are found")
 	cmd.Flags().Bool("prepend-changelog", false, "if the changelog file already exist the new changelog is prepended")
diff --git a/pkg/semrel/semrel.go b/pkg/semrel/semrel.go
index 5201469..9966371 100644
--- a/pkg/semrel/semrel.go
+++ b/pkg/semrel/semrel.go
@@ -33,6 +33,12 @@ func applyChange(rawVersion string, rawChange *Change, allowInitialDevelopmentVe
 		change.Major = true
 	}
 
+	// never allow major version changed if allowInitialDevelopmentVersions is set
+	if allowInitialDevelopmentVersions && version.Major() == 0 && change.Major {
+		change.Major = false
+		change.Minor = true
+	}
+
 	if allowInitialDevelopmentVersions && version.Major() == 0 && version.Minor() == 0 {
 		change.Minor = true
 	}
diff --git a/pkg/semrel/semrel_test.go b/pkg/semrel/semrel_test.go
index dc1e247..e354801 100644
--- a/pkg/semrel/semrel_test.go
+++ b/pkg/semrel/semrel_test.go
@@ -50,7 +50,7 @@ func TestApplyChange(t *testing.T) {
 		{"0.0.0", NoChange, "0.1.0", true, false},
 		{"0.0.0", PatchChange, "0.1.0", true, false},
 		{"0.0.0", MinorChange, "0.1.0", true, false},
-		{"0.0.0", MajorChange, "1.0.0", true, false},
+		{"0.0.0", MajorChange, "0.1.0", true, false},
 
 		{"1.0.0", NoChange, "", false, false},
 		{"1.0.0", NoChange, "1.0.1", false, true},
@@ -63,6 +63,11 @@ func TestApplyChange(t *testing.T) {
 		{"2.0.0-beta", MajorChange, "2.0.0-beta.1", false, false},
 		{"2.0.0-beta.2", MajorChange, "2.0.0-beta.3", false, false},
 		{"2.0.0-beta.1.1", MajorChange, "2.0.0-beta.2", false, false},
+
+		{"0.1.0", MajorChange, "0.2.0", true, false},
+		{"1.0.0", MajorChange, "2.0.0", true, false},
+		{"0.1.0", MinorChange, "0.2.0", true, false},
+		{"0.1.0", NoChange, "0.1.1", true, true},
 	}
 
 	for _, tc := range testCases {
-- 
GitLab