diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-06-17 09:12:58 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-06-17 13:24:47 +0200 |
commit | 54a31ee30b6847175b2119f235ef191c95c2a504 (patch) | |
tree | a2bea8d17d64a87e7a29cdbe995501b6c2e9c58b /script | |
parent | 3f2c1e3e91077a1783cb33b8c0f11c9f70ef072c (diff) | |
download | pylint-git-54a31ee30b6847175b2119f235ef191c95c2a504.tar.gz |
Add tbump script for bumbing version
Diffstat (limited to 'script')
-rw-r--r-- | script/bump_changelog.py | 80 |
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() |