Skip to content

Commit cc61a15

Browse files
committed
release script support RC
1 parent 02ed275 commit cc61a15

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

scripts/release.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
RELEASE_BRANCH_PREFIX = "prepare-release-"
2929

30-
ALPHA_VERSION_PATTERN = re.compile(r"^a([1-9]\d*)$")
30+
PRERELEASE_VERSION_PATTERN = re.compile(r"^(?:a|rc)([1-9]\d*)$")
3131

3232

3333
class Version(BaseVersion):
@@ -47,7 +47,7 @@ def create_argument_parser() -> argparse.ArgumentParser:
4747
parser.add_argument(
4848
"--next_version",
4949
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'",
5151
)
5252

5353
return parser
@@ -141,14 +141,14 @@ def ask_version() -> Text:
141141
"""Allow the user to confirm the version number."""
142142

143143
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)
145145

146146
current_version = Version.coerce(get_current_version())
147147
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"))
149149
version = questionary.text(
150150
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 "
152152
f"e.g. '{next_patch_version}' or '{next_alpha_version}')?",
153153
validate=is_valid_version_number,
154154
).ask()
@@ -241,37 +241,39 @@ def ensure_clean_git() -> None:
241241
def validate_version(version: Text) -> bool:
242242
"""
243243
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...
245245
"""
246246
if isinstance(pep440_version.parse(version), pep440_version.LegacyVersion):
247247
return False
248248

249249
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)
251251

252252

253-
def is_alpha_version(version: Version) -> bool:
253+
def is_prerelease_version(version: Version) -> bool:
254254
"""
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`.
257257
"""
258258
return (
259259
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
261261
)
262262

263263

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
267267
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+
)
269271

270272
return Version(
271273
major=version.major,
272274
minor=version.minor,
273275
patch=version.patch,
274-
prerelease=(f"a{alpha_number + 1}",),
276+
prerelease=(f"{flavor}{prerelease_number + 1}",),
275277
partial=version.partial,
276278
)
277279

@@ -285,7 +287,9 @@ def parse_next_version(version: Text) -> Text:
285287
elif version == "patch":
286288
return str(Version.coerce(get_current_version()).next_patch())
287289
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"))
289293
elif validate_version(version):
290294
return version
291295
else:
@@ -331,7 +335,7 @@ def main(args: argparse.Namespace) -> None:
331335
write_version_to_pyproject(version)
332336

333337
if not version.prerelease:
334-
# never update changelog on an alpha version
338+
# never update changelog on a prerelease version
335339
generate_changelog(version)
336340
base = git_current_branch()
337341
branch = create_release_branch(version)

0 commit comments

Comments
 (0)