27
27
28
28
RELEASE_BRANCH_PREFIX = "prepare-release-"
29
29
30
+ PRERELEASE_FLAVORS = ("alpha" , "rc" )
31
+
32
+ PRERELEASE_FLAVOR_CODES = {"alpha" : "a" , "rc" : "rc" }
33
+
30
34
PRERELEASE_VERSION_PATTERN = re .compile (r"^(a|rc)([1-9]\d*)$" )
31
35
32
36
RELEASE_BRANCH_PATTERN = re .compile (r"^\d+\.\d+\.x$" )
@@ -147,14 +151,27 @@ def is_valid_version_number(v: Text) -> bool:
147
151
148
152
current_version = Version .coerce (get_current_version ())
149
153
next_patch_version = str (current_version .next_patch ())
150
- next_alpha_version = str (next_prerelease (current_version , "a " ))
154
+ next_alpha_version = str (next_prerelease (current_version , "alpha " ))
151
155
version = questionary .text (
152
156
f"What is the version number you want to release "
153
157
f"('major', 'minor', 'patch', 'alpha', 'rc' or valid version number "
154
158
f"e.g. '{ next_patch_version } ' or '{ next_alpha_version } ')?" ,
155
159
validate = is_valid_version_number ,
156
160
).ask ()
157
161
162
+ if version in PRERELEASE_FLAVORS and not current_version .prerelease :
163
+ # at this stage it's hard to guess the kind of version bump the
164
+ # releaser wants, so we ask them
165
+ version = questionary .select (
166
+ f"Which { version } do you want to release?" ,
167
+ choices = [
168
+ str (next_prerelease (current_version , version )),
169
+ str (next_prerelease (current_version .next_patch (), version )),
170
+ str (next_prerelease (current_version .next_minor (), version )),
171
+ str (next_prerelease (current_version .next_major (), version )),
172
+ ],
173
+ ).ask ()
174
+
158
175
if version :
159
176
return version
160
177
else :
@@ -300,7 +317,7 @@ def next_prerelease(version: Version, flavor: Text) -> Version:
300
317
major = version .major ,
301
318
minor = version .minor ,
302
319
patch = version .patch ,
303
- prerelease = (f"{ flavor } { prerelease_number + 1 } " ,),
320
+ prerelease = (f"{ PRERELEASE_FLAVOR_CODES [ flavor ] } { prerelease_number + 1 } " ,),
304
321
partial = version .partial ,
305
322
)
306
323
@@ -313,10 +330,8 @@ def parse_next_version(version: Text) -> Version:
313
330
return Version .coerce (get_current_version ()).next_minor ()
314
331
elif version == "patch" :
315
332
return Version .coerce (get_current_version ()).next_patch ()
316
- elif version == "alpha" :
317
- return next_prerelease (Version .coerce (get_current_version ()), "a" )
318
- elif version == "rc" :
319
- return next_prerelease (Version .coerce (get_current_version ()), "rc" )
333
+ elif version in PRERELEASE_FLAVORS :
334
+ return next_prerelease (Version .coerce (get_current_version ()), version )
320
335
elif validate_version (version ):
321
336
return Version .coerce (version )
322
337
else :
0 commit comments