summaryrefslogtreecommitdiff
path: root/script/bump_changelog.py
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2021-06-17 09:12:58 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-06-17 13:24:47 +0200
commit54a31ee30b6847175b2119f235ef191c95c2a504 (patch)
treea2bea8d17d64a87e7a29cdbe995501b6c2e9c58b /script/bump_changelog.py
parent3f2c1e3e91077a1783cb33b8c0f11c9f70ef072c (diff)
downloadpylint-git-54a31ee30b6847175b2119f235ef191c95c2a504.tar.gz
Add tbump script for bumbing version
Diffstat (limited to 'script/bump_changelog.py')
-rw-r--r--script/bump_changelog.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/script/bump_changelog.py b/script/bump_changelog.py
new file mode 100644
index 000000000..e51653056
--- /dev/null
+++ b/script/bump_changelog.py
@@ -0,0 +1,80 @@
+# ORIGINAL here:https://raw.githubusercontent.com/PyCQA/astroid/master/script/bump_changelog.py
+# DO NOT MODIFY DIRECTLY
+
+"""
+This script permits to upgrade the changelog in astroid or pylint when releasing a version.
+"""
+import argparse
+from datetime import datetime
+from pathlib import Path
+
+DEFAULT_CHANGELOG_PATH = Path("ChangeLog")
+err = "in the changelog, fix that first!"
+TBA_ERROR_MSG = "More than one release date 'TBA' %s" % err
+NEW_VERSION_ERROR_MSG = "The text for this version '{version}' did not exists %s" % err
+NEXT_VERSION_ERROR_MSG = (
+ "The text for the next version '{version}' already exists %s" % err
+)
+
+TODAY = datetime.now()
+WHATS_NEW_TEXT = "What's New in astroid"
+FULL_WHATS_NEW_TEXT = WHATS_NEW_TEXT + " {version}?"
+RELEASE_DATE_TEXT = "Release Date: TBA"
+NEW_RELEASE_DATE_MESSAGE = "Release Date: {}".format(TODAY.strftime("%Y-%m-%d"))
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(__doc__)
+ parser.add_argument("version", help="The version we want to release")
+ args = parser.parse_args()
+ if "dev" not in args.version:
+ version = args.version
+ next_version = get_next_version(version)
+ run(version, next_version)
+
+
+def get_next_version(version: str) -> str:
+ new_version = version.split(".")
+ patch = new_version[2]
+ reminder = None
+ if "-" in patch:
+ patch, reminder = patch.split("-")
+ patch = str(int(patch) + 1)
+ new_version[2] = patch if reminder is None else f"{patch}-{reminder}"
+ return ".".join(new_version)
+
+
+def run(version: str, next_version: str) -> None:
+ with open(DEFAULT_CHANGELOG_PATH) as f:
+ content = f.read()
+ content = transform_content(content, version, next_version)
+ with open(DEFAULT_CHANGELOG_PATH, "w") as f:
+ f.write(content)
+
+
+def transform_content(content: str, version: str, next_version: str) -> str:
+ wn_new_version = FULL_WHATS_NEW_TEXT.format(version=version)
+ wn_next_version = FULL_WHATS_NEW_TEXT.format(version=next_version)
+ # There is only one field where the release date is TBA
+ assert content.count(RELEASE_DATE_TEXT) == 1, TBA_ERROR_MSG
+ # There is already a release note for the version we want to release
+ assert content.count(wn_new_version) == 1, NEW_VERSION_ERROR_MSG.format(
+ version=version
+ )
+ # There is no release notes for the next version
+ assert content.count(wn_next_version) == 0, NEXT_VERSION_ERROR_MSG.format(
+ version=next_version
+ )
+ index = content.find(WHATS_NEW_TEXT)
+ content = content.replace(RELEASE_DATE_TEXT, NEW_RELEASE_DATE_MESSAGE)
+ end_content = content[index:]
+ content = content[:index]
+ content += wn_next_version + "\n"
+ content += "=" * len(wn_next_version) + "\n"
+ content += RELEASE_DATE_TEXT + "\n" * 4
+ content += end_content
+ return content
+
+
+if __name__ == "__main__":
+ main()