From d892bf9e35932425678c1058ae1ba5bf5a089ef1 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 8 May 2025 11:10:37 +0300 Subject: [PATCH 1/2] Fix 'What's New' template --- run_release.py | 1 + 1 file changed, 1 insertion(+) diff --git a/run_release.py b/run_release.py index f8968c35..7784c2bb 100755 --- a/run_release.py +++ b/run_release.py @@ -186,6 +186,7 @@ ------------ * TODO + Porting to Python {version} ---------------------- From 73fe37e17cd30af86af8aa30de221ec3646d4b36 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 8 May 2025 12:35:41 +0300 Subject: [PATCH 2/2] Automatically add new branch 'What's New' to toctree --- run_release.py | 22 +++++++++++++++++++ tests/test_run_release.py | 17 +++++++++++++++ tests/whatsnew_index.rst | 46 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 tests/whatsnew_index.rst diff --git a/run_release.py b/run_release.py index 7784c2bb..fa8d4e6b 100755 --- a/run_release.py +++ b/run_release.py @@ -1169,12 +1169,34 @@ def maybe_prepare_new_main_branch(db: ReleaseShelf) -> None: cwd=db["git_repo"], ) + whatsnew_toctree_file = "Doc/whatsnew/index.rst" + with cd(db["git_repo"]): + update_whatsnew_toctree(db, whatsnew_toctree_file) + + subprocess.check_call( + ["git", "add", whatsnew_toctree_file], + cwd=db["git_repo"], + ) + subprocess.check_call( ["git", "commit", "-a", "-m", f"Python {new_release}"], cwd=db["git_repo"], ) +def update_whatsnew_toctree(db: ReleaseShelf, filename: str) -> None: + release_tag: release_mod.Tag = db["release"] + this_rst = f" {release_tag.major}.{release_tag.minor}.rst" + next_rst = f" {release_tag.major}.{release_tag.minor+1}.rst" + new = next_rst + "\n" + this_rst + + with open(filename) as f: + contents = f.read() + contents = contents.replace(this_rst, new) + with open(filename, "w") as f: + f.write(contents) + + def branch_new_versions(db: ReleaseShelf) -> None: release_tag: release_mod.Tag = db["release"] diff --git a/tests/test_run_release.py b/tests/test_run_release.py index 5c40d37c..4b73b7f2 100644 --- a/tests/test_run_release.py +++ b/tests/test_run_release.py @@ -208,3 +208,20 @@ def test_modify_the_docs_by_version_page_final_yes(capsys, monkeypatch) -> None: "* `Python 3.13.3 `_, documentation released on" in capsys.readouterr().out ) + + +def test_update_whatsnew_toctree(tmp_path: Path) -> None: + # Arrange + # Only first beta triggers update + db = {"release": Tag("3.14.0b1")} + + original_toctree_file = Path(__file__).parent / "whatsnew_index.rst" + toctree__file = tmp_path / "patchlevel.h" + toctree__file.write_text(original_toctree_file.read_text()) + + # Act + run_release.update_whatsnew_toctree(cast(ReleaseShelf, db), str(toctree__file)) + + # Assert + new_contents = toctree__file.read_text() + assert " 3.15.rst\n 3.14.rst\n" in new_contents diff --git a/tests/whatsnew_index.rst b/tests/whatsnew_index.rst new file mode 100644 index 00000000..6ff722a1 --- /dev/null +++ b/tests/whatsnew_index.rst @@ -0,0 +1,46 @@ +.. _whatsnew-index: + +###################### + What's New in Python +###################### + +The "What's New in Python" series of essays takes tours through the most +important changes between major Python versions. They are a "must read" for +anyone wishing to stay up-to-date after a new release. + +.. toctree:: + :maxdepth: 2 + + 3.14.rst + 3.13.rst + 3.12.rst + 3.11.rst + 3.10.rst + 3.9.rst + 3.8.rst + 3.7.rst + 3.6.rst + 3.5.rst + 3.4.rst + 3.3.rst + 3.2.rst + 3.1.rst + 3.0.rst + 2.7.rst + 2.6.rst + 2.5.rst + 2.4.rst + 2.3.rst + 2.2.rst + 2.1.rst + 2.0.rst + +The "Changelog" is an HTML version of the :pypi:`file built` +from the contents of the +:source:`Misc/NEWS.d` directory tree, which contains *all* nontrivial changes +to Python for the current version. + +.. toctree:: + :maxdepth: 2 + + changelog.rst