From 4c33abc4fc29706ba804073cb77676206d26e69f Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Tue, 29 Jun 2021 12:21:30 +0200 Subject: [PATCH] fix #8820 - ensure the release scripts are ware of release candidates as part of this i started to use packaging --- changelog/8820.bugfix.rst | 1 + scripts/prepare-release-pr.py | 10 ++++++---- scripts/release.py | 17 ++++++++--------- tox.ini | 1 + 4 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 changelog/8820.bugfix.rst diff --git a/changelog/8820.bugfix.rst b/changelog/8820.bugfix.rst new file mode 100644 index 00000000000..af8faa934aa --- /dev/null +++ b/changelog/8820.bugfix.rst @@ -0,0 +1 @@ +Ensure prereleases correctly pick the matching changelog template. diff --git a/scripts/prepare-release-pr.py b/scripts/prepare-release-pr.py index 82da553cb2d..806c980e151 100644 --- a/scripts/prepare-release-pr.py +++ b/scripts/prepare-release-pr.py @@ -22,6 +22,7 @@ from colorama import Fore from colorama import init from github3.repos import Repository +from packaging.version import Version class InvalidFeatureRelease(Exception): @@ -113,7 +114,7 @@ def find_next_version(base_branch: str, is_major: bool, prerelease: str) -> str: for v in output.splitlines(): m = re.match(r"\d.\d.\d+$", v.strip()) if m: - valid_versions.append(tuple(int(x) for x in v.split("."))) + valid_versions.append(Version(v)) valid_versions.sort() last_version = valid_versions[-1] @@ -124,12 +125,13 @@ def find_next_version(base_branch: str, is_major: bool, prerelease: str) -> str: breaking = list(changelog.glob("*.breaking.rst")) is_feature_release = features or breaking + # TODO @RonnyPfannschmidt - setuptools_scm version of that if is_major: - return f"{last_version[0]+1}.0.0{prerelease}" + return f"{last_version.major+1}.0.0{prerelease}" elif is_feature_release: - return f"{last_version[0]}.{last_version[1] + 1}.0{prerelease}" + return f"{last_version.major}.{last_version.minor[1] + 1}.0{prerelease}" else: - return f"{last_version[0]}.{last_version[1]}.{last_version[2] + 1}{prerelease}" + return f"{last_version.major}.{last_version.minor}.{last_version.patch + 1}{prerelease}" def main() -> None: diff --git a/scripts/release.py b/scripts/release.py index 6892a0758ea..391600be52f 100644 --- a/scripts/release.py +++ b/scripts/release.py @@ -8,9 +8,10 @@ from colorama import Fore from colorama import init +from packaging.version import Version -def announce(version): +def announce(version: Version): """Generates a new release announcement entry in the docs.""" # Get our list of authors stdout = check_output(["git", "describe", "--abbrev=0", "--tags"]) @@ -22,9 +23,7 @@ def announce(version): contributors = set(stdout.splitlines()) - template_name = ( - "release.minor.rst" if version.endswith(".0") else "release.patch.rst" - ) + template_name = "release.minor.rst" if version.minor == 0 else "release.patch.rst" template_text = ( Path(__file__).parent.joinpath(template_name).read_text(encoding="UTF-8") ) @@ -63,7 +62,7 @@ def regen(version): print(f"{Fore.CYAN}[generate.regen] {Fore.RESET}Updating docs") check_call( ["tox", "-e", "regen"], - env={**os.environ, "SETUPTOOLS_SCM_PRETEND_VERSION": version}, + env={**os.environ, "SETUPTOOLS_SCM_PRETEND_VERSION": str(version)}, ) @@ -81,7 +80,7 @@ def check_links(): check_call(["tox", "-e", "docs-checklinks"]) -def pre_release(version, *, skip_check_links): +def pre_release(version: Version, *, skip_check_links): """Generates new docs, release announcements and creates a local tag.""" announce(version) regen(version) @@ -99,9 +98,9 @@ def pre_release(version, *, skip_check_links): print("Please push your branch and open a PR.") -def changelog(version, write_out=False): +def changelog(version: Version, write_out=False): addopts = [] if write_out else ["--draft"] - check_call(["towncrier", "--yes", "--version", version] + addopts) + check_call(["towncrier", "--yes", "--version", str(version)] + addopts) def main(): @@ -110,7 +109,7 @@ def main(): parser.add_argument("version", help="Release version") parser.add_argument("--skip-check-links", action="store_true", default=False) options = parser.parse_args() - pre_release(options.version, skip_check_links=options.skip_check_links) + pre_release(Version(options.version), skip_check_links=options.skip_check_links) if __name__ == "__main__": diff --git a/tox.ini b/tox.ini index c6dd3f477ee..4631a01e873 100644 --- a/tox.ini +++ b/tox.ini @@ -146,6 +146,7 @@ deps = github3.py pre-commit>=2.9.3 wheel + packaging towncrier commands = python scripts/release.py {posargs}