From 4952bc7c593f689b92b80f4ad640f55a1eaef973 Mon Sep 17 00:00:00 2001 From: qianzhu / Lucien Date: Wed, 2 Sep 2026 05:42:43 +0800 Subject: [PATCH] build: drop support for Python 3.9 (#900) Python 3.9 is EOL, and the 0.43.0 RC1 release vote surfaced that the [cli]/[learn]/[start] extras were already broken on it (PEP 604 unions in burr/cli/__main__.py), forcing the release-validation smoke matrix to skip 3.9. Make the floor official everywhere: - pyproject.toml: requires-python >=3.10 - CI: remove 3.9 from the python-package.yml matrices and the now- obsolete 3.9 skip comment in release-validation.yml - docs: README, getting_started/install, contributing/setup, and the website downloads page now state the 3.10+ requirement - scripts/README.md and the shutil-filter comment in scripts/apache_release.py No runtime behavior changes. Fixes #900 --- .github/workflows/python-package.yml | 8 ++++---- .github/workflows/release-validation.yml | 2 -- README.md | 6 +++--- docs/contributing/setup.rst | 2 +- docs/getting_started/install.rst | 4 ++-- pyproject.toml | 2 +- scripts/README.md | 2 +- scripts/apache_release.py | 2 +- website/src/app/downloads/page.tsx | 6 +++--- 9 files changed, 16 insertions(+), 18 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 6e11a4882..1557f0ad7 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -52,7 +52,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v7 @@ -80,7 +80,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v7 @@ -103,7 +103,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v7 @@ -156,7 +156,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12'] + python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v7 diff --git a/.github/workflows/release-validation.yml b/.github/workflows/release-validation.yml index 4cab2d862..e2e599bc7 100644 --- a/.github/workflows/release-validation.yml +++ b/.github/workflows/release-validation.yml @@ -180,8 +180,6 @@ jobs: strategy: fail-fast: false matrix: - # 3.9 is skipped because burr/cli/__main__.py uses PEP 604 union syntax - # (dict | None) which requires Python 3.10+. Tracked separately. python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v7 diff --git a/README.md b/README.md index 31dc45329..ee5c94a71 100644 --- a/README.md +++ b/README.md @@ -49,9 +49,9 @@ pip install "apache-burr[start]" ``` > [!NOTE] -> In version 0.43.0, the optional CLI included with `[start]`, `[learn]`, and -> `[cli]` requires Python 3.10+. Core library usage remains compatible with -> Python 3.9. +> Burr requires Python 3.10+. (Since 0.43.0, the optional CLI included with +> `[start]`, `[learn]`, and `[cli]` already required Python 3.10+; as of the +> next release, Python 3.9 is no longer supported anywhere.) (see [the docs](https://burr.apache.org/getting_started/install/) if you're using poetry) diff --git a/docs/contributing/setup.rst b/docs/contributing/setup.rst index efe856d3e..d6ea14839 100644 --- a/docs/contributing/setup.rst +++ b/docs/contributing/setup.rst @@ -63,7 +63,7 @@ The latter command will automatically create and install virtual env if one does automatically install the project in editable mode with all developer dependencies defined in dev dependency group. -This will install all potential dependencies. Burr will work with ``python >=3.9``. +This will install all potential dependencies. Burr will work with ``python >=3.10``. ------------------ Linting/Pre-Commit diff --git a/docs/getting_started/install.rst b/docs/getting_started/install.rst index 956ce13fb..e3a6605d6 100644 --- a/docs/getting_started/install.rst +++ b/docs/getting_started/install.rst @@ -35,8 +35,8 @@ simply by running the command ``burr``. Up next we'll write our own application .. note:: - In version 0.43.0, the optional CLI requires Python 3.10 or newer. The core Burr library remains compatible with - Python 3.9. + Burr requires Python 3.10 or newer. (Since 0.43.0, the optional CLI already required Python 3.10 or newer; as of + the next release, Python 3.9 is no longer supported.) If you're using poetry, you can't install the ``start`` target directly, due to `this issue `_. diff --git a/pyproject.toml b/pyproject.toml index 6c3d597f4..6168d4eab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ build-backend = "flit_core.buildapi" name = "apache-burr" version = "0.43.0" dependencies = [] # yes, there are none -requires-python = ">=3.9" +requires-python = ">=3.10" authors = [ {name = "Elijah ben Izzy", email = "elijah@apache.org"}, {name = "Stefan Krawczyk", email = "stefan@apache.org"}, diff --git a/scripts/README.md b/scripts/README.md index 84a9ef156..c30567e8b 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -52,7 +52,7 @@ Specifically, we set the following guidelines: Prerequisites: -- Python 3.9+ +- Python 3.10+ - `flit` for building (`pip install flit`) - `twine` for package validation (`pip install twine`) - GPG key configured for signing diff --git a/scripts/apache_release.py b/scripts/apache_release.py index a07f83529..7035ee353 100644 --- a/scripts/apache_release.py +++ b/scripts/apache_release.py @@ -717,7 +717,7 @@ def _build_sdist_from_git(version: str, output_dir: str = "dist") -> str: unpack_options: dict[str, Any] = {} if sys.version_info >= (3, 12): # This archive was just produced from our own Git repository. Be - # explicit on newer Python versions while retaining Python 3.9-3.11 + # explicit on newer Python versions while retaining Python 3.10-3.11 # compatibility, where shutil has no filter argument. unpack_options["filter"] = "fully_trusted" shutil.unpack_archive(str(source_archive), str(source_tree), format="tar", **unpack_options) diff --git a/website/src/app/downloads/page.tsx b/website/src/app/downloads/page.tsx index 2be34ce75..83579e734 100644 --- a/website/src/app/downloads/page.tsx +++ b/website/src/app/downloads/page.tsx @@ -293,9 +293,9 @@ export default function DownloadsPage() {

- The core library supports Python 3.9+. In 0.43.0, - CLI-related extras require Python 3.10+ due to a known - compatibility issue. Burr has no required runtime dependencies + Burr requires Python 3.10+. (In 0.43.0, + CLI-related extras already required Python 3.10+ due to a known + compatibility issue; Python 3.9 is no longer supported.) Burr has no required runtime dependencies — extras are opt-in.