summary refs log tree commit diff
path: root/scripts-dev/release.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2022-03-02 14:28:18 +0000
committerGitHub <noreply@github.com>2022-03-02 14:28:18 +0000
commit6d282a9c89ae9fb55fe7ccc8d0ab16bf18b206ec (patch)
tree64abaf481831fa986bc2dd5047f89d34a389557c /scripts-dev/release.py
parentReword changelog line about URL previews (diff)
downloadsynapse-6d282a9c89ae9fb55fe7ccc8d0ab16bf18b206ec.tar.xz
Make release script write correct no-op changelog (#12127)
As we want to include the previous version in the "No new changes..."
string.
Diffstat (limited to '')
-rwxr-xr-xscripts-dev/release.py30
1 files changed, 28 insertions, 2 deletions
diff --git a/scripts-dev/release.py b/scripts-dev/release.py
index 4e1f99fee4..046453e65f 100755
--- a/scripts-dev/release.py
+++ b/scripts-dev/release.py
@@ -17,6 +17,8 @@
 """An interactive script for doing a release. See `cli()` below.
 """
 
+import glob
+import os
 import re
 import subprocess
 import sys
@@ -209,8 +211,8 @@ def prepare():
     with open("synapse/__init__.py", "w") as f:
         f.write(parsed_synapse_ast.dumps())
 
-    # Generate changelogs
-    run_until_successful("python3 -m towncrier", shell=True)
+    # Generate changelogs.
+    generate_and_write_changelog(current_version)
 
     # Generate debian changelogs
     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)
 
 
+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__":
     cli()