mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-20 23:51:39 +00:00
81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
# 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()
|