Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Check we're on the right branch before tagging, and on the right tag before uploading #12556

Merged
merged 10 commits into from
May 3, 2022
1 change: 1 addition & 0 deletions changelog.d/12556.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Release script: confirm the commit to be tagged before tagging.
17 changes: 14 additions & 3 deletions scripts-dev/release.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,7 @@ def prepare():
assert not parsed_new_version.is_devrelease
assert not parsed_new_version.is_postrelease

release_branch_name = (
f"release-v{parsed_new_version.major}.{parsed_new_version.minor}"
)
release_branch_name = get_release_branch_name(parsed_new_version)
release_branch = find_ref(repo, release_branch_name)
if release_branch:
if release_branch.is_remote():
Expand Down Expand Up @@ -288,6 +286,15 @@ def tag(gh_token: Optional[str]):
if tag_name in repo.tags:
raise click.ClickException(f"Tag {tag_name} already exists!\n")

# Check we're on the right release branch
release_branch = get_release_branch_name(current_version)
if repo.active_branch.name != release_branch:
click.echo(
f"Need to be on the release branch ({release_branch}) before tagging. "
f"Currently on ({repo.active_branch.name})."
)
click.get_current_context().abort()

# Get the appropriate changelogs and tag.
changes = get_changes_for_version(current_version)

Expand Down Expand Up @@ -459,6 +466,10 @@ def get_package_version() -> version.Version:
return version.Version(version_string)


def get_release_branch_name(version_number: version.Version) -> str:
return f"release-v{version_number.major}.{version_number.minor}"


def find_ref(repo: git.Repo, ref_name: str) -> Optional[git.HEAD]:
"""Find the branch/ref, looking first locally then in the remote."""
if ref_name in repo.refs:
Expand Down