4949 strategy :
5050 matrix :
5151 os : [ windows-latest, macos-latest ]
52- python-version : [ "3.14" ]
52+ python-version : [ "3.14", "3.14t" ]
53+ deprecated-tests : [ "no-deprecation" ]
5354 uv-resolution :
5455 - highest
5556 starlette-src :
@@ -60,23 +61,33 @@ jobs:
6061 python-version : " 3.10"
6162 coverage : coverage
6263 uv-resolution : lowest-direct
64+ deprecated-tests : " no-deprecation"
6365 - os : windows-latest
6466 python-version : " 3.12"
6567 coverage : coverage
6668 uv-resolution : lowest-direct
69+ deprecated-tests : " no-deprecation"
6770 - os : ubuntu-latest
6871 python-version : " 3.13"
6972 coverage : coverage
7073 uv-resolution : highest
74+ deprecated-tests : " no-deprecation"
7175 - os : ubuntu-latest
7276 python-version : " 3.13"
7377 uv-resolution : highest
7478 codspeed : codspeed
79+ deprecated-tests : " no-deprecation"
7580 - os : ubuntu-latest
7681 python-version : " 3.14"
7782 coverage : coverage
7883 uv-resolution : highest
7984 starlette-src : starlette-git
85+ deprecated-tests : " test-deprecation"
86+ - os : ubuntu-latest
87+ python-version : " 3.14t"
88+ coverage : coverage
89+ uv-resolution : highest
90+ deprecated-tests : " no-deprecation"
8091 fail-fast : false
8192 runs-on : ${{ matrix.os }}
8293 env :
@@ -108,18 +119,24 @@ jobs:
108119 - name : Install Starlette from source
109120 if : matrix.starlette-src == 'starlette-git'
110121 run : uv pip install "git+https://github.com/Kludex/starlette@main"
122+ - name : Install deprecated libraries just for testing
123+ if : matrix.deprecated-tests == 'test-deprecation'
124+ run : uv pip install orjson ujson
125+ - name : Reinstall SQLAlchemy without Cython extensions
126+ if : matrix.python-version == '3.14t' && matrix.os == 'ubuntu-latest'
127+ run : " DISABLE_SQLALCHEMY_CEXT=1 uv pip install --force-reinstall --no-binary :all: sqlalchemy"
111128 - run : mkdir coverage
112129 - name : Test
113130 run : uv run --no-sync bash scripts/test-cov.sh
114131 env :
115- COVERAGE_FILE : coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}
116- CONTEXT : ${{ runner.os }}-py${{ matrix.python-version }}
132+ COVERAGE_FILE : coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}-${{ matrix.deprecated-tests}}
133+ CONTEXT : ${{ runner.os }}-py${{ matrix.python-version }}-${{ matrix.deprecated-tests}}
117134 # Do not store coverage for all possible combinations to avoid file size max errors in Smokeshow
118135 - name : Store coverage files
119136 if : matrix.coverage == 'coverage'
120137 uses : actions/upload-artifact@v7
121138 with :
122- name : coverage-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/coverage/.coverage.*') }}
139+ name : coverage-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.deprecated-tests}}-${{ hashFiles('**/coverage/.coverage.*') }}
123140 path : coverage
124141 include-hidden-files : true
125142
0 commit comments