@@ -25,6 +25,7 @@ import (
25
25
"fmt"
26
26
"log"
27
27
"os/exec"
28
+ "strings"
28
29
29
30
"github.com/blang/semver/v4"
30
31
"github.com/pkg/errors"
@@ -42,6 +43,11 @@ const (
42
43
alphaRelease = "ALPHA RELEASE"
43
44
betaRelease = "BETA RELEASE"
44
45
releaseCandidate = "RELEASE CANDIDATE"
46
+
47
+ // Pre-release type constants
48
+ preReleaseRC = "rc"
49
+ preReleaseBeta = "beta"
50
+ preReleaseAlpha = "alpha"
45
51
)
46
52
47
53
func main () {
@@ -143,11 +149,11 @@ func releaseTypeFromNewTag(newTagConfig string) string {
143
149
// Only allow RC and beta releases. More types must be defined here.
144
150
// If a new type is not defined, no warning banner will be printed.
145
151
switch newTag .Pre [0 ].VersionStr {
146
- case "rc" :
152
+ case preReleaseRC :
147
153
return releaseCandidate
148
- case "beta" :
154
+ case preReleaseBeta :
149
155
return betaRelease
150
- case "alpha" :
156
+ case preReleaseAlpha :
151
157
return alphaRelease
152
158
}
153
159
return ""
@@ -187,6 +193,45 @@ func validateConfig(config *notesCmdConfig) error {
187
193
}
188
194
}
189
195
196
+ if config .previousReleaseVersion != "" {
197
+ if err := validatePreviousReleaseVersion (config .previousReleaseVersion ); err != nil {
198
+ return err
199
+ }
200
+ }
201
+
202
+ return nil
203
+ }
204
+
205
+ func validatePreviousReleaseVersion (previousReleaseVersion string ) error {
206
+ // Extract version string from ref format (e.g., "tags/v1.0.0-rc.1" -> "v1.0.0-rc.1")
207
+ if ! strings .Contains (previousReleaseVersion , "/" ) {
208
+ return errors .New ("--previous-release-version must be in ref format (e.g., tags/v1.0.0-rc.1)" )
209
+ }
210
+
211
+ parts := strings .SplitN (previousReleaseVersion , "/" , 2 )
212
+ if len (parts ) != 2 {
213
+ return errors .New ("--previous-release-version must be in ref format (e.g., tags/v1.0.0-rc.1)" )
214
+ }
215
+
216
+ versionStr := parts [1 ]
217
+
218
+ // Parse the version to check if it contains rc, beta, or alpha
219
+ version , err := semver .ParseTolerant (versionStr )
220
+ if err != nil {
221
+ return errors .Wrap (err , "invalid --previous-release-version, is not a valid semver" )
222
+ }
223
+
224
+ // Check if the version has pre-release identifiers
225
+ if len (version .Pre ) == 0 {
226
+ return errors .Errorf ("--previous-release-version must contain '%s', '%s', or '%s' pre-release identifier" , preReleaseRC , preReleaseBeta , preReleaseAlpha )
227
+ }
228
+
229
+ // Check if the first pre-release identifier is 'rc', 'beta', or 'alpha'
230
+ preReleaseType := version .Pre [0 ].VersionStr
231
+ if preReleaseType != preReleaseRC && preReleaseType != preReleaseBeta && preReleaseType != preReleaseAlpha {
232
+ return errors .Errorf ("--previous-release-version must contain '%s', '%s', or '%s' pre-release identifier" , preReleaseRC , preReleaseBeta , preReleaseAlpha )
233
+ }
234
+
190
235
return nil
191
236
}
192
237
0 commit comments