@@ -25,8 +25,8 @@ import (
2525 "golang.org/x/mod/semver"
2626)
2727
28- // Version represents a semantic version.
29- type Version struct {
28+ // version represents a semantic version.
29+ type version struct {
3030 Major , Minor , Patch int
3131 // Prerelease is the non-numeric part of the prerelease string (e.g., "alpha", "beta").
3232 Prerelease string
@@ -47,20 +47,20 @@ type Version struct {
4747// prerelease - https://semver.org/spec/v1.0.0.html#spec-item-4.
4848var semverV1PrereleaseNumberRegexp = regexp .MustCompile (`^(.*?)(\d+)$` )
4949
50- // Parse deconstructs the SemVer 1.0.0 or 2.0.0 version string into a Version
50+ // parse deconstructs the SemVer 1.0.0 or 2.0.0 version string into a [version]
5151// struct.
52- func Parse (versionString string ) (Version , error ) {
52+ func parse (versionString string ) (version , error ) {
5353 // Our client versions must not have a "v" prefix.
5454 if strings .HasPrefix (versionString , "v" ) {
55- return Version {}, fmt .Errorf ("invalid version format: %s" , versionString )
55+ return version {}, fmt .Errorf ("invalid version format: %s" , versionString )
5656 }
5757
5858 // Prepend "v" internally so that we can use various [semver] APIs.
5959 // Then canonicalize it to zero-fill any missing version segments.
6060 // Strips build metadata if present - we do not use build metadata suffixes.
6161 vPrefixedVersion := "v" + versionString
6262 if ! semver .IsValid (vPrefixedVersion ) {
63- return Version {}, fmt .Errorf ("invalid version format: %s" , versionString )
63+ return version {}, fmt .Errorf ("invalid version format: %s" , versionString )
6464 }
6565 vPrefixedVersion = semver .Canonical (vPrefixedVersion )
6666
@@ -72,22 +72,22 @@ func Parse(versionString string) (Version, error) {
7272 versionCore = strings .TrimSuffix (versionCore , prerelease )
7373 vParts := strings .Split (versionCore , "." )
7474
75- var v Version
75+ var v version
7676 var err error
7777
7878 v .Major , err = strconv .Atoi (vParts [0 ])
7979 if err != nil {
80- return Version {}, fmt .Errorf ("invalid major version: %w" , err )
80+ return version {}, fmt .Errorf ("invalid major version: %w" , err )
8181 }
8282
8383 v .Minor , err = strconv .Atoi (vParts [1 ])
8484 if err != nil {
85- return Version {}, fmt .Errorf ("invalid minor version: %w" , err )
85+ return version {}, fmt .Errorf ("invalid minor version: %w" , err )
8686 }
8787
8888 v .Patch , err = strconv .Atoi (vParts [2 ])
8989 if err != nil {
90- return Version {}, fmt .Errorf ("invalid patch version: %w" , err )
90+ return version {}, fmt .Errorf ("invalid patch version: %w" , err )
9191 }
9292
9393 if prerelease == "" {
@@ -110,24 +110,24 @@ func Parse(versionString string) (Version, error) {
110110 if numStr != "" {
111111 num , err := strconv .Atoi (numStr )
112112 if err != nil {
113- return Version {}, fmt .Errorf ("invalid prerelease number: %w" , err )
113+ return version {}, fmt .Errorf ("invalid prerelease number: %w" , err )
114114 }
115115 v .PrereleaseNumber = & num
116116 }
117117
118118 return v , nil
119119}
120120
121- // String formats a Version struct into a string.
122- func (v Version ) String () string {
123- version := fmt .Sprintf ("%d.%d.%d" , v .Major , v .Minor , v .Patch )
121+ // String formats a [version] struct into a string.
122+ func (v version ) String () string {
123+ vStr := fmt .Sprintf ("%d.%d.%d" , v .Major , v .Minor , v .Patch )
124124 if v .Prerelease != "" {
125- version += "-" + v .Prerelease
125+ vStr += "-" + v .Prerelease
126126 if v .PrereleaseNumber != nil {
127- version += v .PrereleaseSeparator + strconv .Itoa (* v .PrereleaseNumber )
127+ vStr += v .PrereleaseSeparator + strconv .Itoa (* v .PrereleaseNumber )
128128 }
129129 }
130- return version
130+ return vStr
131131}
132132
133133// MaxVersion returns the largest semantic version string among the provided version strings.
@@ -198,50 +198,50 @@ func (o DeriveNextOptions) DeriveNext(highestChange ChangeLevel, currentVersion
198198 return currentVersion , nil
199199 }
200200
201- version , err := Parse (currentVersion )
201+ v , err := parse (currentVersion )
202202 if err != nil {
203203 return "" , fmt .Errorf ("failed to parse current version: %w" , err )
204204 }
205205
206206 // Only bump the prerelease version number.
207- if version .Prerelease != "" && ! o .BumpVersionCore {
207+ if v .Prerelease != "" && ! o .BumpVersionCore {
208208 // Append prerelease number if there isn't one.
209- if version .PrereleaseNumber == nil {
210- version .PrereleaseSeparator = "."
209+ if v .PrereleaseNumber == nil {
210+ v .PrereleaseSeparator = "."
211211
212212 // Initialize a new int pointer set to 0. Fallthrough to increment
213213 // to 1. We prefer the first prerelease to use 1 instead of 0.
214- version .PrereleaseNumber = new (int )
214+ v .PrereleaseNumber = new (int )
215215 }
216216
217- * version .PrereleaseNumber ++
218- return version .String (), nil
217+ * v .PrereleaseNumber ++
218+ return v .String (), nil
219219 }
220220
221221 // Reset prerelease number, if present, then fallthrough to bump version core.
222- if version .PrereleaseNumber != nil && o .BumpVersionCore {
223- * version .PrereleaseNumber = 1
222+ if v .PrereleaseNumber != nil && o .BumpVersionCore {
223+ * v .PrereleaseNumber = 1
224224 }
225225
226226 // Breaking changes result in a minor bump for pre-1.0.0 versions.
227- if highestChange == Major && version .Major == 0 {
227+ if highestChange == Major && v .Major == 0 {
228228 highestChange = Minor
229229 }
230230
231231 // Bump the version core.
232232 switch highestChange {
233233 case Major :
234- version .Major ++
235- version .Minor = 0
236- version .Patch = 0
234+ v .Major ++
235+ v .Minor = 0
236+ v .Patch = 0
237237 case Minor :
238- version .Minor ++
239- version .Patch = 0
238+ v .Minor ++
239+ v .Patch = 0
240240 case Patch :
241- version .Patch ++
241+ v .Patch ++
242242 }
243243
244- return version .String (), nil
244+ return v .String (), nil
245245}
246246
247247// DeriveNext calculates the next version based on the highest change type and
0 commit comments