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

Release script improvements #10966

Merged
merged 5 commits into from
Oct 11, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/10966.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Make the release script more robust and transparent.
36 changes: 32 additions & 4 deletions scripts-dev/release.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,19 @@
from packaging import version


def run_until_successful(command, *args, **kwargs):
while True:
completed_process = subprocess.run(command, *args, **kwargs)
exit_code = completed_process.returncode
if exit_code == 0:
# successful, so nothing more to do here.
return completed_process

print(f"The command {command!r} failed with exit code {exit_code}.")
print("Please try to correct the failure and then re-run.")
click.confirm("Try again?", abort=True)


@click.group()
def cli():
"""An interactive script to walk through the parts of creating a release.
Expand Down Expand Up @@ -197,7 +210,7 @@ def prepare():
f.write(parsed_synapse_ast.dumps())

# Generate changelogs
subprocess.run("python3 -m towncrier", shell=True)
run_until_successful("python3 -m towncrier", shell=True)

# Generate debian changelogs
if parsed_new_version.pre is not None:
Expand All @@ -209,11 +222,11 @@ def prepare():
else:
debian_version = new_version

subprocess.run(
run_until_successful(
f'dch -M -v {debian_version} "New synapse release {debian_version}."',
shell=True,
)
subprocess.run('dch -M -r -D stable ""', shell=True)
run_until_successful('dch -M -r -D stable ""', shell=True)

# Show the user the changes and ask if they want to edit the change log.
repo.git.add("-u")
Expand All @@ -224,7 +237,7 @@ def prepare():

# Commit the changes.
repo.git.add("-u")
repo.git.commit(f"-m {new_version}")
repo.git.commit("-m", new_version)

# We give the option to bail here in case the user wants to make sure things
# are OK before pushing.
Expand All @@ -239,6 +252,8 @@ def prepare():
# Otherwise, push and open the changelog in the browser.
repo.git.push("-u", repo.remote().name, repo.active_branch.name)

print("Opening the changelog in your browser...")
print("Please ask others to give it a check.")
click.launch(
f"https://github.com/matrix-org/synapse/blob/{repo.active_branch.name}/CHANGES.md"
)
Expand Down Expand Up @@ -290,7 +305,19 @@ def tag(gh_token: Optional[str]):

# If no token was given, we bail here
if not gh_token:
print("Launching the GitHub release page in your browser.")
print("Please correct the title and create a draft.")
if current_version.is_prerelease:
print("As this is an RC, remember to mark it as a pre-release!")
print("(by the way, this step can be automated by passing --gh-token,")
print(" or one of the GH_TOKEN or GITHUB_TOKEN env vars.)")
click.launch(f"https://github.com/matrix-org/synapse/releases/edit/{tag_name}")

print("Once done, you need to wait for the release assets to build.")
if click.confirm("Launch the release assets actions page?", default=True):
click.launch(
f"https://github.com/matrix-org/synapse/actions?query=branch%3A{tag_name}"
)
return

# Create a new draft release
Expand All @@ -305,6 +332,7 @@ def tag(gh_token: Optional[str]):
)

# Open the release and the actions where we are building the assets.
print("Launching the release page and the actions page.")
click.launch(release.html_url)
click.launch(
f"https://github.com/matrix-org/synapse/actions?query=branch%3A{tag_name}"
Expand Down