Make release script write correct no-op changelog (#12127)

As we want to include the previous version in the "No new changes..."
string.
This commit is contained in:
Erik Johnston 2022-03-02 14:28:18 +00:00 committed by GitHub
parent 3b9142f7f4
commit 6d282a9c89
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 2 deletions

1
changelog.d/12127.misc Normal file
View file

@ -0,0 +1 @@
Update release script to insert the previous version when writing "No significant changes" line in the changelog.

View file

@ -17,6 +17,8 @@
"""An interactive script for doing a release. See `cli()` below. """An interactive script for doing a release. See `cli()` below.
""" """
import glob
import os
import re import re
import subprocess import subprocess
import sys import sys
@ -209,8 +211,8 @@ def prepare():
with open("synapse/__init__.py", "w") as f: with open("synapse/__init__.py", "w") as f:
f.write(parsed_synapse_ast.dumps()) f.write(parsed_synapse_ast.dumps())
# Generate changelogs # Generate changelogs.
run_until_successful("python3 -m towncrier", shell=True) generate_and_write_changelog(current_version)
# Generate debian changelogs # Generate debian changelogs
if parsed_new_version.pre is not None: if parsed_new_version.pre is not None:
@ -523,5 +525,29 @@ def get_changes_for_version(wanted_version: version.Version) -> str:
return "\n".join(version_changelog) return "\n".join(version_changelog)
def generate_and_write_changelog(current_version: version.Version):
# We do this by getting a draft so that we can edit it before writing to the
# changelog.
result = run_until_successful(
"python3 -m towncrier --draft", shell=True, capture_output=True
)
new_changes = result.stdout.decode("utf-8")
new_changes = new_changes.replace(
"No significant changes.", f"No significant changes since {current_version}."
)
# Prepend changes to changelog
with open("CHANGES.md", "r+") as f:
existing_content = f.read()
f.seek(0, 0)
f.write(new_changes)
f.write("\n")
f.write(existing_content)
# Remove all the news fragments
for f in glob.iglob("changelog.d/*.*"):
os.remove(f)
if __name__ == "__main__": if __name__ == "__main__":
cli() cli()