27
27
28
28
RELEASE_BRANCH_PREFIX = "prepare-release-"
29
29
30
- ALPHA_VERSION_PATTERN = re .compile (r"^a ([1-9]\d*)$" )
30
+ PRERELEASE_VERSION_PATTERN = re .compile (r"^(?:a|rc) ([1-9]\d*)$" )
31
31
32
32
33
33
class Version (BaseVersion ):
@@ -47,7 +47,7 @@ def create_argument_parser() -> argparse.ArgumentParser:
47
47
parser .add_argument (
48
48
"--next_version" ,
49
49
type = str ,
50
- help = "Either next version number or 'major', 'minor', 'patch', 'alpha'" ,
50
+ help = "Either next version number or 'major', 'minor', 'patch', 'alpha', 'rc' " ,
51
51
)
52
52
53
53
return parser
@@ -141,14 +141,14 @@ def ask_version() -> Text:
141
141
"""Allow the user to confirm the version number."""
142
142
143
143
def is_valid_version_number (v : Text ) -> bool :
144
- return v in {"major" , "minor" , "patch" , "alpha" } or validate_version (v )
144
+ return v in {"major" , "minor" , "patch" , "alpha" , "rc" } or validate_version (v )
145
145
146
146
current_version = Version .coerce (get_current_version ())
147
147
next_patch_version = str (current_version .next_patch ())
148
- next_alpha_version = str (next_alpha (current_version ))
148
+ next_alpha_version = str (next_prerelease (current_version , "a" ))
149
149
version = questionary .text (
150
150
f"What is the version number you want to release "
151
- f"('major', 'minor', 'patch', 'alpha' or valid version number "
151
+ f"('major', 'minor', 'patch', 'alpha', 'rc' or valid version number "
152
152
f"e.g. '{ next_patch_version } ' or '{ next_alpha_version } ')?" ,
153
153
validate = is_valid_version_number ,
154
154
).ask ()
@@ -241,37 +241,39 @@ def ensure_clean_git() -> None:
241
241
def validate_version (version : Text ) -> bool :
242
242
"""
243
243
Ensure that the version follows semver
244
- and that the alpha follows the format `a1`, `a2 `, etc...
244
+ and that the prerelease follows the format `a1`, `rc2 `, etc...
245
245
"""
246
246
if isinstance (pep440_version .parse (version ), pep440_version .LegacyVersion ):
247
247
return False
248
248
249
249
version_object = Version .coerce (version )
250
- return not version_object .prerelease or is_alpha_version (version_object )
250
+ return not version_object .prerelease or is_prerelease_version (version_object )
251
251
252
252
253
- def is_alpha_version (version : Version ) -> bool :
253
+ def is_prerelease_version (version : Version ) -> bool :
254
254
"""
255
- Validate that the alpha part in a version follows
256
- the pattern specified in `ALPHA_VERSION_PATTERN `.
255
+ Validate that the prerelease part in a version follows
256
+ the pattern specified in `PRERELEASE_VERSION_PATTERN `.
257
257
"""
258
258
return (
259
259
len (version .prerelease ) == 1
260
- and ALPHA_VERSION_PATTERN .match (version .prerelease [0 ]) is not None
260
+ and PRERELEASE_VERSION_PATTERN .match (version .prerelease [0 ]) is not None
261
261
)
262
262
263
263
264
- def next_alpha (version : Version ) -> Version :
265
- """Bump the current version to the next alpha ."""
266
- alpha_number = 0
264
+ def next_prerelease (version : Version , flavor : Text ) -> Version :
265
+ """Bump the current version to the next prerelease ."""
266
+ prerelease_number = 0
267
267
if version .prerelease :
268
- alpha_number = int (ALPHA_VERSION_PATTERN .match (version .prerelease [0 ]).group (1 ))
268
+ prerelease_number = int (
269
+ PRERELEASE_VERSION_PATTERN .match (version .prerelease [0 ]).group (1 )
270
+ )
269
271
270
272
return Version (
271
273
major = version .major ,
272
274
minor = version .minor ,
273
275
patch = version .patch ,
274
- prerelease = (f"a { alpha_number + 1 } " ,),
276
+ prerelease = (f"{ flavor } { prerelease_number + 1 } " ,),
275
277
partial = version .partial ,
276
278
)
277
279
@@ -285,7 +287,9 @@ def parse_next_version(version: Text) -> Text:
285
287
elif version == "patch" :
286
288
return str (Version .coerce (get_current_version ()).next_patch ())
287
289
elif version == "alpha" :
288
- return str (next_alpha (Version .coerce (get_current_version ())))
290
+ return str (next_prerelease (Version .coerce (get_current_version ()), "a" ))
291
+ elif version == "rc" :
292
+ return str (next_prerelease (Version .coerce (get_current_version ()), "rc" ))
289
293
elif validate_version (version ):
290
294
return version
291
295
else :
@@ -331,7 +335,7 @@ def main(args: argparse.Namespace) -> None:
331
335
write_version_to_pyproject (version )
332
336
333
337
if not version .prerelease :
334
- # never update changelog on an alpha version
338
+ # never update changelog on a prerelease version
335
339
generate_changelog (version )
336
340
base = git_current_branch ()
337
341
branch = create_release_branch (version )
0 commit comments