From 241777fde85cfee72a1425331e4f00d76e035195 Mon Sep 17 00:00:00 2001 From: Shaurya Dwivedi Date: Mon, 9 Nov 2026 23:55:43 +0000 Subject: [PATCH] Drop Python 3.9 from CI, add 3.14, bump checkout/setup-python The ubuntu-latest runner label now resolves to Ubuntu 26.04, and actions/setup-python has no 3.9 build for it, so the 3.9 ubuntu job fails at "Set up Python" on every PR. 3.9 has been end-of-life since 2025-10-31. - Remove 3.9 from the test matrices in main.yml and release.yml and from CIBW_BUILD; set requires-python to >=3.10 and the default tox env to py3.10. - Add 3.14 to both matrices and CIBW_BUILD. - Bump actions/checkout to v5 and actions/setup-python to v6 to clear the Node 20 deprecation warning. - Update the README tox/pyenv examples, which still referenced 3.8/3.9. 3.15 is deliberately not added yet: jsonconversion 2.0.0 calls the private json.encoder._make_iterencode with an isinstance= keyword that 3.15 removed, so tests/test_json_encoder.py fails on 3.15 until that dependency is fixed or replaced. --- .github/workflows/main.yml | 6 +++--- .github/workflows/release.yml | 17 ++++++++++------- README.md | 12 ++++++------ pyproject.toml | 4 ++-- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5075d24b3..d3554a4b7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,13 +10,13 @@ jobs: strategy: matrix: # Python maintains 5 versions, along with the to-be-released version. Every October, this changes. - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.10'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', 'pypy-3.10'] os: [ macos-latest, ubuntu-latest, windows-latest ] fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b2f575930..da039fe39 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,11 +10,11 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.10'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', 'pypy-3.10'] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} @@ -34,7 +34,7 @@ jobs: matrix: python-version: [ '3.10' ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true @@ -84,7 +84,7 @@ jobs: cibw_arch: "i686 x86_64 aarch64" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true @@ -106,8 +106,11 @@ jobs: # See the following for the status of python versions (ie. what's EoL'd, security only, etc): # https://devguide.python.org/versions/ # - # At the time of writing, anything older than 3.9 is end-of-life. - CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-*" + # At the time of writing, anything older than 3.10 is end-of-life. (3.9 has no build + # for the Ubuntu 26.04 runners that ubuntu-latest now resolves to.) + # 3.15 is excluded until jsonconversion works with it: it calls the private + # json.encoder._make_iterencode with an isinstance= kwarg that 3.15 removed. + CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-* cp314-*" CIBW_ARCHS: ${{ matrix.cibw_arch }} CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }} diff --git a/README.md b/README.md index 90fc29bd3..649d6519a 100644 --- a/README.md +++ b/README.md @@ -86,13 +86,13 @@ installed Python. Install relevant versions of Python: ``` -$ for V in 3.8.10 3.9.5 do pyenv install $V; done +$ for V in 3.10.19 3.14.10; do pyenv install $V; done ``` Once you have these installations, add them as a local `pyenv` configuration ``` -$ pyenv local 3.8.10 3.9.5 +$ pyenv local 3.10.19 3.14.10 ``` Assuming you have `pyenv` properly set up (making sure `pyenv init` is evaluated into your shell), @@ -102,14 +102,14 @@ you can now run `tox`: # Run tox for all versions of python which executes py.test. $ tox -# Run tox for just Python 3.8 and 3.9. -$ tox -e py38,py39 +# Run tox for just Python 3.10 and 3.14. +$ tox -e py310,py314 # Run tox for a specific version and run py.test with high verbosity -$ tox -e py39 -- py.test -vv +$ tox -e py310 -- py.test -vv # Run tox for a specific version and just the virtual env REPL. -$ tox -e py39 -- python +$ tox -e py310 -- python ``` ## TODO diff --git a/pyproject.toml b/pyproject.toml index 7cb34c5c6..3e66eaa18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "amazon-ion" readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.10" license = { "file" = "LICENSE" } authors = [{ "name" = "Amazon Ion Team", "email" = "ion-team@amazon.com" }] keywords = [] @@ -73,7 +73,7 @@ testpaths = ["tests"] # running our default unit tests (minus benchmarking related tests). This ensures that we # can easily test against supported python versions. [tool.tox] -envlist = ["py3.9", "pypy3"] # default environments to run. +envlist = ["py3.10", "pypy3"] # default environments to run. [tool.tox.env_run_base] extras = ["test"]