From 398bcbdc54d8766b0a9199069df4ae02cb0483a8 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:31:30 +0300 Subject: [PATCH 1/3] Python 3.14 universal2 is for macOS 11 and later --- add_to_pydotorg.py | 19 +++++++++++++++++-- tests/test_add_to_pydotorg.py | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/add_to_pydotorg.py b/add_to_pydotorg.py index ab382475..6b8b974a 100755 --- a/add_to_pydotorg.py +++ b/add_to_pydotorg.py @@ -91,10 +91,19 @@ def run_cmd( } +def macos_universal2_description(version: tuple[int, int, int]) -> str: + if version >= (3, 14): + return "for macOS 11 and later" + elif version >= (3, 12, 6): + return "for macOS 10.13 and later" + else: + return "for macOS 10.9 and later" + + def get_file_descriptions( release: str, ) -> list[tuple[re.Pattern[str], tuple[str, str, bool, str]]]: - v = minor_version_tuple(release) + v = base_version_tuple(release) rx = re.compile # value is (file "name", OS slug, download button, file "description"). # OS=None means no ReleaseFile object. Only one matching *file* (not regex) @@ -165,7 +174,7 @@ def get_file_descriptions( "macOS 64-bit universal2 installer", "macos", True, - f"for macOS {'10.13' if v >= (3, 12, 6) else '10.9'} and later", + macos_universal2_description(v), ), ), ( @@ -211,6 +220,12 @@ def base_version(release: str) -> str: return ".".join(m.groups()[:3]) +def base_version_tuple(release: str) -> tuple[int, int, int]: + m = tag_cre.match(release) + assert m is not None, f"Invalid release: {release}" + return int(m.groups()[0]), int(m.groups()[1]), int(m.groups()[2]) + + def minor_version(release: str) -> str: m = tag_cre.match(release) assert m is not None, f"Invalid release: {release}" diff --git a/tests/test_add_to_pydotorg.py b/tests/test_add_to_pydotorg.py index 300f7fb4..8565823a 100644 --- a/tests/test_add_to_pydotorg.py +++ b/tests/test_add_to_pydotorg.py @@ -90,6 +90,19 @@ def test_base_version(release: str, expected: str) -> None: assert add_to_pydotorg.base_version(release) == expected +@pytest.mark.parametrize( + ["release", "expected"], + [ + ("3.9.0a0", (3, 9, 0)), + ("3.10.0b3", (3, 10, 0)), + ("3.11.0rc2", (3, 11, 0)), + ("3.12.15", (3, 12, 15)), + ], +) +def test_base_version_tuple(release: str, expected: tuple[int, int, int]) -> None: + assert add_to_pydotorg.base_version_tuple(release) == expected + + @pytest.mark.parametrize( ["release", "expected"], [ @@ -116,6 +129,25 @@ def test_minor_version_tuple(release: str, expected: tuple[int, int]) -> None: assert add_to_pydotorg.minor_version_tuple(release) == expected +@pytest.mark.parametrize( + ["release", "expected"], + [ + ((3, 9, 0), "for macOS 10.9 and later"), + ((3, 10, 0), "for macOS 10.9 and later"), + ((3, 11, 0), "for macOS 10.9 and later"), + ((3, 12, 0), "for macOS 10.9 and later"), + ((3, 12, 5), "for macOS 10.9 and later"), + ((3, 12, 6), "for macOS 10.13 and later"), + ((3, 13, 0), "for macOS 10.13 and later"), + ((3, 14, 0), "for macOS 11 and later"), + ], +) +def test_macos_universal2_description( + release: tuple[int, int, int], expected: str +) -> None: + assert add_to_pydotorg.macos_universal2_description(release) == expected + + def test_list_files(fs: FakeFilesystem) -> None: # Arrange fake_ftp_root = "/fake_ftp_root" @@ -185,7 +217,7 @@ def test_list_files(fs: FakeFilesystem) -> None: "macOS 64-bit universal2 installer", "macos", True, - "for macOS 10.13 and later", + "for macOS 11 and later", ), ( "python-3.14.0b3-x86_64-linux-android.tar.gz", From 68d6017f48ac6aff6b08d59634d80d55855f47e0 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:38:54 +0300 Subject: [PATCH 2/3] Remove redundant code for EOL Python 3.8 --- add_to_pydotorg.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/add_to_pydotorg.py b/add_to_pydotorg.py index 6b8b974a..5beba320 100755 --- a/add_to_pydotorg.py +++ b/add_to_pydotorg.py @@ -81,7 +81,6 @@ def run_cmd( # Update this list when new release managers are added. release_to_sigstore_identity_and_oidc_issuer = { - "3.8": ("lukasz@langa.pl", github_oidc_provider), "3.9": ("lukasz@langa.pl", github_oidc_provider), "3.10": ("pablogsal@python.org", google_oidc_provider), "3.11": ("pablogsal@python.org", google_oidc_provider), @@ -134,13 +133,13 @@ def get_file_descriptions( ), ( rx(r"-amd64\.exe$"), - ("Windows installer (64-bit)", "windows", v >= (3, 9), "Recommended"), + ("Windows installer (64-bit)", "windows", True, "Recommended"), ), ( rx(r"-embed-win32\.zip$"), ("Windows embeddable package (32-bit)", "windows", False, ""), ), - (rx(r"\.exe$"), ("Windows installer (32-bit)", "windows", v < (3, 9), "")), + (rx(r"\.exe$"), ("Windows installer (32-bit)", "windows", False, "")), ( rx(r"-macosx10\.5(_rev\d)?\.(dm|pk)g$"), ( From f581697321f4d940ac6ab4dd3ab7b69513f7db59 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 14 Aug 2025 13:14:52 +0300 Subject: [PATCH 3/3] Python 3.14 installer is for macOS 10.15 and later --- add_to_pydotorg.py | 2 +- tests/test_add_to_pydotorg.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/add_to_pydotorg.py b/add_to_pydotorg.py index 5beba320..3fae8d8d 100755 --- a/add_to_pydotorg.py +++ b/add_to_pydotorg.py @@ -92,7 +92,7 @@ def run_cmd( def macos_universal2_description(version: tuple[int, int, int]) -> str: if version >= (3, 14): - return "for macOS 11 and later" + return "for macOS 10.15 and later" elif version >= (3, 12, 6): return "for macOS 10.13 and later" else: diff --git a/tests/test_add_to_pydotorg.py b/tests/test_add_to_pydotorg.py index 8565823a..7a32971e 100644 --- a/tests/test_add_to_pydotorg.py +++ b/tests/test_add_to_pydotorg.py @@ -139,7 +139,7 @@ def test_minor_version_tuple(release: str, expected: tuple[int, int]) -> None: ((3, 12, 5), "for macOS 10.9 and later"), ((3, 12, 6), "for macOS 10.13 and later"), ((3, 13, 0), "for macOS 10.13 and later"), - ((3, 14, 0), "for macOS 11 and later"), + ((3, 14, 0), "for macOS 10.15 and later"), ], ) def test_macos_universal2_description( @@ -217,7 +217,7 @@ def test_list_files(fs: FakeFilesystem) -> None: "macOS 64-bit universal2 installer", "macos", True, - "for macOS 11 and later", + "for macOS 10.15 and later", ), ( "python-3.14.0b3-x86_64-linux-android.tar.gz",