diff --git a/run_release.py b/run_release.py
index 45979432..8f2f6738 100755
--- a/run_release.py
+++ b/run_release.py
@@ -9,6 +9,7 @@
import argparse
import asyncio
import contextlib
+import datetime as dt
import functools
import getpass
import json
@@ -1013,21 +1014,35 @@ def purge_the_cdn(db: ReleaseShelf) -> None:
raise RuntimeError("Failed to purge the python.org/downloads CDN")
-def modify_the_release_to_the_prerelease_pages(db: ReleaseShelf) -> None:
- pre_release_tags = {"rc", "b", "a"}
- if any(tag in str(db["release"]) for tag in pre_release_tags):
+def modify_the_prereleases_page(db: ReleaseShelf) -> None:
+ if db["release"].is_final:
if not ask_question(
- "Have you already added the release to https://www.python.org/download/pre-releases/"
+ "Have you already removed the release from https://www.python.org/download/pre-releases/ ?"
):
raise ReleaseException(
- "The release has not been added to the pre-release page"
+ "The release has not been removed from the pre-releases page"
)
else:
if not ask_question(
- "Have you already removed the release from https://www.python.org/download/pre-releases/"
+ "Have you already added the release to https://www.python.org/download/pre-releases/ ?"
):
raise ReleaseException(
- "The release has not been removed from the pre-release page"
+ "The release has not been added to the pre-releases page"
+ )
+
+
+def modify_the_docs_by_version_page(db: ReleaseShelf) -> None:
+ if db["release"].is_final:
+ version = db["release"]
+ date = dt.datetime.now().strftime("%d %B %Y")
+ if not ask_question(
+ "Have you already added the docs to https://www.python.org/doc/versions/ ?\n"
+ "For example:\n"
+ f"* `Python {version} `_, "
+ f"documentation released on {date}."
+ ):
+ raise ReleaseException(
+ "The docs have not been added to the docs by version page"
)
@@ -1329,7 +1344,8 @@ def _api_key(api_key: str) -> str:
Task(remove_temporary_branch, "Removing temporary release branch"),
Task(run_add_to_python_dot_org, "Add files to python.org download page"),
Task(purge_the_cdn, "Purge the CDN of python.org/downloads"),
- Task(modify_the_release_to_the_prerelease_pages, "Modify the pre-release page"),
+ Task(modify_the_prereleases_page, "Modify the pre-release page"),
+ Task(modify_the_docs_by_version_page, "Update docs by version page"),
]
automata = ReleaseDriver(
git_repo=args.repo,
diff --git a/tests/test_run_release.py b/tests/test_run_release.py
index 07a101dd..5c40d37c 100644
--- a/tests/test_run_release.py
+++ b/tests/test_run_release.py
@@ -88,7 +88,7 @@ def test_check_doc_unreleased_version_no_file_alpha(tmp_path: Path) -> None:
run_release.check_doc_unreleased_version(cast(ReleaseShelf, db))
-def test_check_doc_unreleased_version_ok(monkeypatch, tmp_path: Path) -> None:
+def test_check_doc_unreleased_version_ok(tmp_path: Path) -> None:
prepare_fake_docs(
tmp_path,
"
New in 3.13
",
@@ -124,3 +124,87 @@ def test_check_doc_unreleased_version_waived(monkeypatch, tmp_path: Path) -> Non
}
with fake_answers(monkeypatch, ["yes"]):
run_release.check_doc_unreleased_version(cast(ReleaseShelf, db))
+
+
+@pytest.mark.parametrize(
+ ["tag", "expected"],
+ [
+ ("3.14.0a7", "Have you already added the release to "),
+ ("3.13.3", "Have you already removed the release from "),
+ ],
+)
+def test_modify_the_prerelease_page_yes(
+ capsys, monkeypatch, tag: str, expected: str
+) -> None:
+ # Arrange
+ db = {"release": Tag(tag)}
+
+ # Act
+ with fake_answers(monkeypatch, ["yes"]):
+ run_release.modify_the_prereleases_page(cast(ReleaseShelf, db))
+
+ # Assert
+ assert expected in capsys.readouterr().out
+
+
+@pytest.mark.parametrize(
+ ["tag", "expected"],
+ [
+ ("3.14.0a7", "The release has not been added to the pre-releases page"),
+ ("3.13.3", "The release has not been removed from the pre-releases page"),
+ ],
+)
+def test_modify_the_prerelease_page_no(monkeypatch, tag: str, expected: str) -> None:
+ # Arrange
+ db = {"release": Tag(tag)}
+
+ # Act
+ with (
+ fake_answers(monkeypatch, ["no"]),
+ pytest.raises(run_release.ReleaseException, match=expected),
+ ):
+ run_release.modify_the_prereleases_page(cast(ReleaseShelf, db))
+
+
+def test_modify_the_docs_by_version_page_prerelease(capsys) -> None:
+ # Arrange
+ db = {"release": Tag("3.14.0a7")}
+
+ # Act
+ run_release.modify_the_docs_by_version_page(cast(ReleaseShelf, db))
+
+ # Assert
+ assert capsys.readouterr().out == ""
+
+
+def test_modify_the_docs_by_version_page_final_no(capsys, monkeypatch) -> None:
+ # Arrange
+ db = {"release": Tag("3.13.3")}
+
+ # Act
+ with (
+ fake_answers(monkeypatch, ["no"]),
+ pytest.raises(run_release.ReleaseException),
+ ):
+ run_release.modify_the_docs_by_version_page(cast(ReleaseShelf, db))
+
+ # Assert
+ assert (
+ "* `Python 3.13.3 `_, documentation released on"
+ in capsys.readouterr().out
+ )
+
+
+def test_modify_the_docs_by_version_page_final_yes(capsys, monkeypatch) -> None:
+ # Arrange
+ db = {"release": Tag("3.13.3")}
+
+ # Act
+ with fake_answers(monkeypatch, ["yes"]):
+ run_release.modify_the_docs_by_version_page(cast(ReleaseShelf, db))
+
+ # Assert
+ assert (
+ "* `Python 3.13.3 `_, documentation released on"
+ in capsys.readouterr().out
+ )