@@ -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
+ preReleaseAlpha = "alpha"
49
+ preReleaseBeta = "beta"
50
+ preReleaseRC = "rc"
45
51
)
46
52
47
53
func main () {
@@ -140,15 +146,15 @@ func releaseTypeFromNewTag(newTagConfig string) string {
140
146
return ""
141
147
}
142
148
143
- // Only allow RC and beta releases. More types must be defined here.
149
+ // Only allow alpha, beta and RC 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" :
147
- return releaseCandidate
148
- case "beta" :
149
- return betaRelease
150
- case "alpha" :
152
+ case preReleaseAlpha :
151
153
return alphaRelease
154
+ case preReleaseBeta :
155
+ return betaRelease
156
+ case preReleaseRC :
157
+ return releaseCandidate
152
158
}
153
159
return ""
154
160
}
@@ -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 alpha, beta, or rc
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" , preReleaseAlpha , preReleaseBeta , preReleaseRC )
227
+ }
228
+
229
+ // Check if the first pre-release identifier is 'alpha', 'beta', or 'rc'
230
+ preReleaseType := version .Pre [0 ].VersionStr
231
+ if preReleaseType != preReleaseAlpha && preReleaseType != preReleaseBeta && preReleaseType != preReleaseRC {
232
+ return errors .Errorf ("--previous-release-version must contain '%s', '%s', or '%s' pre-release identifier" , preReleaseAlpha , preReleaseBeta , preReleaseRC )
233
+ }
234
+
190
235
return nil
191
236
}
192
237
0 commit comments