From bf352e338827e2e540a6acc83df6a1629042e06b Mon Sep 17 00:00:00 2001 From: Ioannis Angelakopoulos Date: Tue, 23 Dec 2025 09:05:05 -0500 Subject: [PATCH 1/2] feat(ci): add Python 3.13 and 3.14 support to CI jobs - Add Python 3.13 and 3.14 to unit test matrix (Ubuntu + macOS) - Add Python 3.13 and 3.14 to e2e test matrix - Update macOS e2e tests to run only on Python 3.14 (latest stable) - Add Python 3.14 classifier to pyproject.toml - Update .mergify.yml with new CI job requirements Fixes: #891 Co-Authored-By: Claude Signed-off-by: Ioannis Angelakopoulos --- .github/workflows/test.yaml | 8 ++++++++ .mergify.yml | 32 ++++++++++++++++++++++++++------ pyproject.toml | 3 ++- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 9cfa6c8a..5e41f4bf 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -15,6 +15,8 @@ jobs: python-version: - "3.11" - "3.12" + - "3.13" + - "3.14" rust-version: # RHEL 9.4 has rustc 1.75 - "1.75" @@ -71,6 +73,8 @@ jobs: python-version: - "3.11" - "3.12" + - "3.13" + - "3.14" rust-version: # RHEL 9.4 has rustc 1.75 - "1.75" @@ -89,6 +93,10 @@ jobs: # only run macOS tests on latest stable Python version - os: macos-latest python-version: "3.11" + - os: macos-latest + python-version: "3.12" + - os: macos-latest + python-version: "3.13" steps: - name: Get source diff --git a/.mergify.yml b/.mergify.yml index 0728bc78..596fb901 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -33,29 +33,49 @@ pull_request_rules: - check-success=unit (3.11, 1.75, macos-latest) - check-success=unit (3.12, 1.75, ubuntu-latest) - check-success=unit (3.12, 1.75, macos-latest) + - check-success=unit (3.13, 1.75, ubuntu-latest) + - check-success=unit (3.13, 1.75, macos-latest) + - check-success=unit (3.14, 1.75, ubuntu-latest) + - check-success=unit (3.14, 1.75, macos-latest) # MyPy type checking - check-success=mypy # E2E test suites (consolidated from individual tests) + # Python 3.11 - Ubuntu only (macOS excluded) - check-success=e2e (3.11, 1.75, ci_bootstrap_parallel_suite, ubuntu-latest) - check-success=e2e (3.11, 1.75, ci_bootstrap_suite, ubuntu-latest) - check-success=e2e (3.11, 1.75, ci_build_suite, ubuntu-latest) - check-success=e2e (3.11, 1.75, ci_config_suite, ubuntu-latest) - check-success=e2e (3.11, 1.75, ci_specialized_suite, ubuntu-latest) - check-success=e2e (3.11, 1.75, ci_workflow_suite, ubuntu-latest) - - check-success=e2e (3.12, 1.75, ci_bootstrap_parallel_suite, macos-latest) + # Python 3.12 - Ubuntu only (macOS excluded) - check-success=e2e (3.12, 1.75, ci_bootstrap_parallel_suite, ubuntu-latest) - - check-success=e2e (3.12, 1.75, ci_bootstrap_suite, macos-latest) - check-success=e2e (3.12, 1.75, ci_bootstrap_suite, ubuntu-latest) - - check-success=e2e (3.12, 1.75, ci_build_suite, macos-latest) - check-success=e2e (3.12, 1.75, ci_build_suite, ubuntu-latest) - - check-success=e2e (3.12, 1.75, ci_config_suite, macos-latest) - check-success=e2e (3.12, 1.75, ci_config_suite, ubuntu-latest) - - check-success=e2e (3.12, 1.75, ci_specialized_suite, macos-latest) - check-success=e2e (3.12, 1.75, ci_specialized_suite, ubuntu-latest) - - check-success=e2e (3.12, 1.75, ci_workflow_suite, macos-latest) - check-success=e2e (3.12, 1.75, ci_workflow_suite, ubuntu-latest) + # Python 3.13 - Ubuntu only (macOS excluded) + - check-success=e2e (3.13, 1.75, ci_bootstrap_parallel_suite, ubuntu-latest) + - check-success=e2e (3.13, 1.75, ci_bootstrap_suite, ubuntu-latest) + - check-success=e2e (3.13, 1.75, ci_build_suite, ubuntu-latest) + - check-success=e2e (3.13, 1.75, ci_config_suite, ubuntu-latest) + - check-success=e2e (3.13, 1.75, ci_specialized_suite, ubuntu-latest) + - check-success=e2e (3.13, 1.75, ci_workflow_suite, ubuntu-latest) + # Python 3.14 - Ubuntu + macOS (latest stable) + - check-success=e2e (3.14, 1.75, ci_bootstrap_parallel_suite, ubuntu-latest) + - check-success=e2e (3.14, 1.75, ci_bootstrap_parallel_suite, macos-latest) + - check-success=e2e (3.14, 1.75, ci_bootstrap_suite, ubuntu-latest) + - check-success=e2e (3.14, 1.75, ci_bootstrap_suite, macos-latest) + - check-success=e2e (3.14, 1.75, ci_build_suite, ubuntu-latest) + - check-success=e2e (3.14, 1.75, ci_build_suite, macos-latest) + - check-success=e2e (3.14, 1.75, ci_config_suite, ubuntu-latest) + - check-success=e2e (3.14, 1.75, ci_config_suite, macos-latest) + - check-success=e2e (3.14, 1.75, ci_specialized_suite, ubuntu-latest) + - check-success=e2e (3.14, 1.75, ci_specialized_suite, macos-latest) + - check-success=e2e (3.14, 1.75, ci_workflow_suite, ubuntu-latest) + - check-success=e2e (3.14, 1.75, ci_workflow_suite, macos-latest) # At least 1 reviewer from maintainers - and: diff --git a/pyproject.toml b/pyproject.toml index b96a9004..2356d2d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Utilities", ] @@ -254,7 +255,7 @@ install-hooks = "pre-commit install" pkglint = [ "python -m build", "twine check dist/*.tar.gz dist/*.whl", - "check-python-versions --only pyproject.toml,.github/workflows/test.yml", + "check-python-versions --only pyproject.toml,.github/workflows/test.yaml", ] [tool.hatch.envs.e2e] From c237da560d4270a6dcb26190dc455cc1d60d7ed1 Mon Sep 17 00:00:00 2001 From: Ioannis Angelakopoulos Date: Tue, 23 Dec 2025 09:29:05 -0500 Subject: [PATCH 2/2] fix(e2e): update flit_core to 3.10.1 for Python 3.14 compatibility flit_core 3.9.0 uses ast.Str which was removed in Python 3.14, causing multiple e2e tests to fail. Update to 3.10.1 which supports all Python versions 3.11-3.14. Co-Authored-By: Claude Signed-off-by: Ioannis Angelakopoulos --- e2e/download_sequence/simplejson-build-order.json | 6 +++--- e2e/test_download_sequence.sh | 2 +- e2e/test_override.sh | 6 +++--- e2e/test_prebuilt_wheels_alt_server.sh | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/e2e/download_sequence/simplejson-build-order.json b/e2e/download_sequence/simplejson-build-order.json index 1ffb167a..4271d3f0 100644 --- a/e2e/download_sequence/simplejson-build-order.json +++ b/e2e/download_sequence/simplejson-build-order.json @@ -3,7 +3,7 @@ "type": "build-system", "req": "flit_core<4,>=3.8", "dist": "flit-core", - "version": "3.9.0", + "version": "3.10.1", "why": [ [ "toplevel", @@ -23,11 +23,11 @@ [ "build-system", "flit_core<4,>=3.8", - "3.9.0" + "3.10.1" ] ], "prebuilt": false, - "source_url": "https://files.pythonhosted.org/packages/c4/e6/c1ac50fe3eebb38a155155711e6e864e254ce4b6e17fe2429b4c4d5b9e80/flit_core-3.9.0.tar.gz#sha256=72ad266176c4a3fcfab5f2930d76896059851240570ce9a98733b658cb786eba", + "source_url": "https://files.pythonhosted.org/packages/d5/ae/09427bea9227a33ec834ed5461432752fd5d02b14f93dd68406c91684622/flit_core-3.10.1.tar.gz#sha256=66e5b87874a0d6e39691f0e22f09306736b633548670ad3c09ec9db03c5662f7", "source_url_type": "sdist" }, { diff --git a/e2e/test_download_sequence.sh b/e2e/test_download_sequence.sh index 51293540..b49f897a 100755 --- a/e2e/test_download_sequence.sh +++ b/e2e/test_download_sequence.sh @@ -21,7 +21,7 @@ pass=true # Check for output files EXPECTED_FILES=" -sdists-repo/downloads/flit_core-3.9.0.tar.gz +sdists-repo/downloads/flit_core-3.10.1.tar.gz sdists-repo/downloads/setuptools-70.0.0.tar.gz sdists-repo/downloads/simplejson-3.19.2.tar.gz sdists-repo/downloads/wheel-0.43.0.tar.gz diff --git a/e2e/test_override.sh b/e2e/test_override.sh index b8580b7e..399908ea 100755 --- a/e2e/test_override.sh +++ b/e2e/test_override.sh @@ -23,7 +23,7 @@ fromager \ --wheels-repo="$OUTDIR/wheels-repo" \ --work-dir="$OUTDIR/work-dir" \ --patches-dir "$SCRIPTDIR/flit_core_patches" \ - bootstrap 'flit_core==3.9.0' + bootstrap 'flit_core==3.10.1' find "$OUTDIR/wheels-repo/simple/" -name '*.whl' @@ -50,9 +50,9 @@ fi # Check for output files EXPECTED_FILES=" -wheels-repo/downloads/flit_core-3.9.0-0-py3-none-any.whl +wheels-repo/downloads/flit_core-3.10.1-0-py3-none-any.whl -sdists-repo/downloads/flit_core-3.9.0.tar.gz +sdists-repo/downloads/flit_core-3.10.1.tar.gz " for f in $EXPECTED_FILES; do diff --git a/e2e/test_prebuilt_wheels_alt_server.sh b/e2e/test_prebuilt_wheels_alt_server.sh index 3fb05ce7..46c7ce90 100755 --- a/e2e/test_prebuilt_wheels_alt_server.sh +++ b/e2e/test_prebuilt_wheels_alt_server.sh @@ -12,7 +12,7 @@ mkdir -p "$INIT" # What are we building? DIST="flit_core" -VERSION="3.9.0" +VERSION="3.10.1" # Get the wheel we need from PyPI fromager \ @@ -57,7 +57,7 @@ fromager \ # Ensure we have both expected wheels EXPECTED_FILES=" -wheels-repo/prebuilt/flit_core-3.9.0-0-py3-none-any.whl +wheels-repo/prebuilt/flit_core-3.10.1-0-py3-none-any.whl wheels-repo/downloads/wheel-0.43.0-0-py3-none-any.whl "