diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index fcfb81e..1396362 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -44,17 +44,15 @@ jobs: id: setup_freethreaded continue-on-error: true with: - python-version: | - 3.13t - 3.14t + python-version: 3.14t - name: Configure maturin interpreters shell: bash run: | INTERP='3.8 3.9 3.10 3.11 3.12 3.13 3.14' if [[ '${{ steps.setup_freethreaded.outcome }}' == 'success' ]]; then - INTERP="$INTERP 3.13t 3.14t" + INTERP="$INTERP 3.14t" else - echo '::warning::Free-threaded Python (3.13t/3.14t) unavailable from setup-python; skipping cp313t/cp314t wheels this run.' + echo '::warning::Free-threaded Python (3.14t) unavailable from setup-python; skipping cp314t wheels this run.' fi echo "MATURIN_INTERPRETERS=$INTERP pypy3.11" >> "$GITHUB_ENV" - name: Build wheels @@ -92,17 +90,15 @@ jobs: id: setup_freethreaded continue-on-error: true with: - python-version: | - 3.13t - 3.14t + python-version: 3.14t - name: Configure maturin interpreters shell: bash run: | INTERP='3.8 3.9 3.10 3.11 3.12 3.13 3.14' if [[ '${{ steps.setup_freethreaded.outcome }}' == 'success' ]]; then - INTERP="$INTERP 3.13t 3.14t" + INTERP="$INTERP 3.14t" else - echo '::warning::Free-threaded Python (3.13t/3.14t) unavailable from setup-python; skipping cp313t/cp314t wheels this run.' + echo '::warning::Free-threaded Python (3.14t) unavailable from setup-python; skipping cp314t wheels this run.' fi echo "MATURIN_INTERPRETERS=$INTERP pypy3.11" >> "$GITHUB_ENV" - name: Build wheels @@ -129,9 +125,8 @@ jobs: target: x86 steps: - uses: actions/checkout@v4 - # Windows: install standard CPython only first, run maturin, then add 3.13t/3.14t and maturin again. - # If both GIL and free-threaded are on PATH before a single maturin run, detection picks 3.13t for 3.13 - # and cp313/cp314 wheels are missing on win_amd64 (see https://github.com/PyO3/maturin-action/issues/313). + # Windows: install standard CPython only first, run maturin, then add 3.14t and maturin again. + # 3.13t is not supported by recent PyO3 - uses: actions/setup-python@v5 with: python-version: | @@ -156,20 +151,18 @@ jobs: id: setup_freethreaded continue-on-error: true with: - python-version: | - 3.13t - 3.14t + python-version: 3.14t architecture: ${{ matrix.platform.target }} - name: Warn if free-threaded Python unavailable if: steps.setup_freethreaded.outcome != 'success' run: | - echo '::warning::Free-threaded Python (3.13t/3.14t) unavailable from setup-python; skipping cp313t/cp314t wheels this run.' + echo '::warning::Free-threaded Python (3.14t) unavailable from setup-python; skipping cp314t wheels this run.' - name: Build wheels (free-threaded) if: steps.setup_freethreaded.outcome == 'success' uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} - args: --release --out dist -i 3.13t 3.14t + args: --release --out dist -i 3.14t sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v4 @@ -201,17 +194,15 @@ jobs: id: setup_freethreaded continue-on-error: true with: - python-version: | - 3.13t - 3.14t + python-version: 3.14t - name: Configure maturin interpreters shell: bash run: | INTERP='3.8 3.9 3.10 3.11 3.12 3.13 3.14' if [[ '${{ steps.setup_freethreaded.outcome }}' == 'success' ]]; then - INTERP="$INTERP 3.13t 3.14t" + INTERP="$INTERP 3.14t" else - echo '::warning::Free-threaded Python (3.13t/3.14t) unavailable from setup-python; skipping cp313t/cp314t wheels this run.' + echo '::warning::Free-threaded Python (3.14t) unavailable from setup-python; skipping cp314t wheels this run.' fi echo "MATURIN_INTERPRETERS=$INTERP pypy3.11" >> "$GITHUB_ENV" - name: Build wheels @@ -230,24 +221,18 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - # Try 3.14t first, then 3.13t. Use outcome (not conclusion): continue-on-error leaves conclusion "success" + # Try 3.14t first. Use outcome (not conclusion) - 3.13t isn't supported: continue-on-error leaves conclusion "success" # even when setup fails, but outcome stays "failure" so we can chain fallbacks reliably. - uses: actions/setup-python@v5 id: py314t continue-on-error: true with: python-version: '3.14t' - - uses: actions/setup-python@v5 - id: py313t - if: steps.py314t.outcome != 'success' - continue-on-error: true - with: - python-version: '3.13t' - name: Resolve free-threaded interpreter id: ft_py run: | ready=false - if [[ '${{ steps.py314t.outcome }}' == 'success' ]] || [[ '${{ steps.py313t.outcome }}' == 'success' ]]; then + if [[ '${{ steps.py314t.outcome }}' == 'success' ]]; then ready=true fi echo "ready=${ready}" >> "$GITHUB_OUTPUT" @@ -260,17 +245,13 @@ jobs: shell: bash run: | set -euo pipefail - if [[ '${{ steps.py314t.outcome }}' == 'success' ]]; then - export UV_PYTHON='${{ steps.py314t.outputs.python-path }}' - else - export UV_PYTHON='${{ steps.py313t.outputs.python-path }}' - fi + export UV_PYTHON='${{ steps.py314t.outputs.python-path }}' uv sync --extra dev --locked uv run pytest tests/ - name: Free-threaded Python unavailable if: steps.ft_py.outputs.ready != 'true' run: | - echo '::notice::No free-threaded Python (3.14t / 3.13t) available from setup-python for this runner; skipping extension tests.' + echo '::notice::No free-threaded Python (3.14t) available from setup-python for this runner; skipping extension tests.' sdist: runs-on: ubuntu-latest diff --git a/Cargo.lock b/Cargo.lock index fb3bd9f..46da4b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,55 +2,18 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "cc" -version = "1.2.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" - [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "indoc" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" - [[package]] name = "libc" version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -74,36 +37,32 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf" +checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c" dependencies = [ - "indoc", "libc", - "memoffset", "once_cell", "portable-atomic", "pyo3-build-config", "pyo3-ffi", "pyo3-macros", - "unindent", ] [[package]] name = "pyo3-build-config" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb" +checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078" dependencies = [ - "python3-dll-a", "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be" +checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b" dependencies = [ "libc", "pyo3-build-config", @@ -111,9 +70,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71" +checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -123,13 +82,12 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b" +checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362" dependencies = [ "heck", "proc-macro2", - "pyo3-build-config", "quote", "syn", ] @@ -142,30 +100,15 @@ dependencies = [ "unicode-bidi", ] -[[package]] -name = "python3-dll-a" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d381ef313ae70b4da5f95f8a4de773c6aa5cd28f73adec4b4a31df70b66780d8" -dependencies = [ - "cc", -] - [[package]] name = "quote" -version = "1.0.36" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "syn" version = "2.0.70" @@ -194,9 +137,3 @@ name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unindent" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" diff --git a/Cargo.toml b/Cargo.toml index 5769f72..3e3abcc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ name = "bidi" crate-type = ["cdylib"] [dependencies] -pyo3 = { version = "0.27.1", features = [ +pyo3 = { version = "0.29.0", features = [ "extension-module", "generate-import-lib", ] }