From 0c3f893616a49b27d66015744c6ed2c1b1ef699e Mon Sep 17 00:00:00 2001 From: Carlos Antonio da Silva Date: Mon, 10 Nov 2025 15:27:09 -0300 Subject: [PATCH 1/4] Test with Python 3.14 Released Oct 7, 2025. https://docs.python.org/3/whatsnew/3.14.html --- .github/workflows/run-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 2a4afcf..d0fede7 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -6,10 +6,10 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Python ${{ matrix.python-version }} id: setup-python From 13840c2c13ed1ac1ace4ded8b6649777901e27e5 Mon Sep 17 00:00:00 2001 From: Carlos Antonio da Silva Date: Mon, 10 Nov 2025 15:47:59 -0300 Subject: [PATCH 2/4] Update flask to the latest v2.x version --- sample-apps/flask_celery_sample/poetry.lock | 2 +- sample-apps/flask_rq_sample/poetry.lock | 40 +++++++++++++-------- sample-apps/flask_sample/poetry.lock | 40 +++++++++++++-------- 3 files changed, 53 insertions(+), 29 deletions(-) diff --git a/sample-apps/flask_celery_sample/poetry.lock b/sample-apps/flask_celery_sample/poetry.lock index a399dfd..dbeabcb 100644 --- a/sample-apps/flask_celery_sample/poetry.lock +++ b/sample-apps/flask_celery_sample/poetry.lock @@ -421,7 +421,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "judoscale" -version = "1.10.1" +version = "1.10.2" description = "Official Python adapter for Judoscale — the advanced autoscaler for Heroku" optional = false python-versions = "^3.8" diff --git a/sample-apps/flask_rq_sample/poetry.lock b/sample-apps/flask_rq_sample/poetry.lock index 3d3afe6..155a1c8 100644 --- a/sample-apps/flask_rq_sample/poetry.lock +++ b/sample-apps/flask_rq_sample/poetry.lock @@ -11,6 +11,17 @@ files = [ {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, ] +[[package]] +name = "blinker" +version = "1.8.2" +description = "Fast, simple object-to-object and broadcast signaling" +optional = false +python-versions = ">=3.8" +files = [ + {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, + {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, +] + [[package]] name = "certifi" version = "2022.12.7" @@ -146,21 +157,22 @@ files = [ [[package]] name = "flask" -version = "2.2.3" +version = "2.3.3" description = "A simple framework for building complex web applications." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Flask-2.2.3-py3-none-any.whl", hash = "sha256:c0bec9477df1cb867e5a67c9e1ab758de9cb4a3e52dd70681f59fa40a62b3f2d"}, - {file = "Flask-2.2.3.tar.gz", hash = "sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d"}, + {file = "flask-2.3.3-py3-none-any.whl", hash = "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b"}, + {file = "flask-2.3.3.tar.gz", hash = "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc"}, ] [package.dependencies] -click = ">=8.0" +blinker = ">=1.6.2" +click = ">=8.1.3" importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -itsdangerous = ">=2.0" -Jinja2 = ">=3.0" -Werkzeug = ">=2.2.2" +itsdangerous = ">=2.1.2" +Jinja2 = ">=3.1.2" +Werkzeug = ">=2.3.7" [package.extras] async = ["asgiref (>=3.2)"] @@ -246,7 +258,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "judoscale" -version = "1.10.1" +version = "1.10.2" description = "Official Python adapter for Judoscale — the advanced autoscaler for Heroku" optional = false python-versions = "^3.8" @@ -416,20 +428,20 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "werkzeug" -version = "2.2.3" +version = "3.0.6" description = "The comprehensive WSGI web application library." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Werkzeug-2.2.3-py3-none-any.whl", hash = "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612"}, - {file = "Werkzeug-2.2.3.tar.gz", hash = "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe"}, + {file = "werkzeug-3.0.6-py3-none-any.whl", hash = "sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17"}, + {file = "werkzeug-3.0.6.tar.gz", hash = "sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d"}, ] [package.dependencies] MarkupSafe = ">=2.1.1" [package.extras] -watchdog = ["watchdog"] +watchdog = ["watchdog (>=2.3)"] [[package]] name = "zipp" diff --git a/sample-apps/flask_sample/poetry.lock b/sample-apps/flask_sample/poetry.lock index b4a00e8..fc74e7d 100644 --- a/sample-apps/flask_sample/poetry.lock +++ b/sample-apps/flask_sample/poetry.lock @@ -1,5 +1,16 @@ # This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +[[package]] +name = "blinker" +version = "1.8.2" +description = "Fast, simple object-to-object and broadcast signaling" +optional = false +python-versions = ">=3.8" +files = [ + {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, + {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, +] + [[package]] name = "certifi" version = "2022.12.7" @@ -135,21 +146,22 @@ files = [ [[package]] name = "flask" -version = "2.2.2" +version = "2.3.3" description = "A simple framework for building complex web applications." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, - {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, + {file = "flask-2.3.3-py3-none-any.whl", hash = "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b"}, + {file = "flask-2.3.3.tar.gz", hash = "sha256:09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc"}, ] [package.dependencies] -click = ">=8.0" +blinker = ">=1.6.2" +click = ">=8.1.3" importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -itsdangerous = ">=2.0" -Jinja2 = ">=3.0" -Werkzeug = ">=2.2.2" +itsdangerous = ">=2.1.2" +Jinja2 = ">=3.1.2" +Werkzeug = ">=2.3.7" [package.extras] async = ["asgiref (>=3.2)"] @@ -235,7 +247,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "judoscale" -version = "1.10.1" +version = "1.10.2" description = "Official Python adapter for Judoscale — the advanced autoscaler for Heroku" optional = false python-versions = "^3.8" @@ -371,20 +383,20 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "werkzeug" -version = "2.2.2" +version = "3.0.6" description = "The comprehensive WSGI web application library." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Werkzeug-2.2.2-py3-none-any.whl", hash = "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5"}, - {file = "Werkzeug-2.2.2.tar.gz", hash = "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f"}, + {file = "werkzeug-3.0.6-py3-none-any.whl", hash = "sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17"}, + {file = "werkzeug-3.0.6.tar.gz", hash = "sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d"}, ] [package.dependencies] MarkupSafe = ">=2.1.1" [package.extras] -watchdog = ["watchdog"] +watchdog = ["watchdog (>=2.3)"] [[package]] name = "zipp" From 5da4c38d9cd3665b862a2dc1825a105eea532e28 Mon Sep 17 00:00:00 2001 From: Carlos Antonio da Silva Date: Mon, 10 Nov 2025 16:50:15 -0300 Subject: [PATCH 3/4] Update FastAPI to latest version to test with Python v3.14 --- sample-apps/fastapi_celery_sample/poetry.lock | 29 ++++++++++++++----- .../fastapi_celery_sample/pyproject.toml | 2 +- sample-apps/fastapi_sample/poetry.lock | 29 ++++++++++++++----- sample-apps/fastapi_sample/pyproject.toml | 2 +- 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/sample-apps/fastapi_celery_sample/poetry.lock b/sample-apps/fastapi_celery_sample/poetry.lock index 63cc376..781e93c 100644 --- a/sample-apps/fastapi_celery_sample/poetry.lock +++ b/sample-apps/fastapi_celery_sample/poetry.lock @@ -14,6 +14,17 @@ files = [ [package.dependencies] vine = ">=5.0.0,<6.0.0" +[[package]] +name = "annotated-doc" +version = "0.0.3" +description = "Document parameters, class attributes, return types, and variables inline, with Annotated." +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_doc-0.0.3-py3-none-any.whl", hash = "sha256:348ec6664a76f1fd3be81f43dffbee4c7e8ce931ba71ec67cc7f4ade7fbbb580"}, + {file = "annotated_doc-0.0.3.tar.gz", hash = "sha256:e18370014c70187422c33e945053ff4c286f453a984eba84d0dbfa0c935adeda"}, +] + [[package]] name = "annotated-types" version = "0.7.0" @@ -355,23 +366,25 @@ test = ["pytest (>=6)"] [[package]] name = "fastapi" -version = "0.115.14" +version = "0.121.1" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca"}, - {file = "fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739"}, + {file = "fastapi-0.121.1-py3-none-any.whl", hash = "sha256:2c5c7028bc3a58d8f5f09aecd3fd88a000ccc0c5ad627693264181a3c33aa1fc"}, + {file = "fastapi-0.121.1.tar.gz", hash = "sha256:b6dba0538fd15dab6fe4d3e5493c3957d8a9e1e9257f56446b5859af66f32441"}, ] [package.dependencies] +annotated-doc = ">=0.0.2" pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.40.0,<0.47.0" +starlette = ">=0.40.0,<0.50.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "h11" @@ -455,7 +468,7 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "judoscale" -version = "1.10.1" +version = "1.10.2" description = "Official Python adapter for Judoscale — the advanced autoscaler for Heroku" optional = false python-versions = "^3.8" @@ -1185,4 +1198,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "cb7400f6f2eb337afe785d8a2df96cea9e652bd16ca1045d8a42e3a2f4d9870e" +content-hash = "3b74300452167d3ae19904819446e66eed6c23f0ca29ae7c4809389cc96728f9" diff --git a/sample-apps/fastapi_celery_sample/pyproject.toml b/sample-apps/fastapi_celery_sample/pyproject.toml index 3226c6c..06f2c97 100644 --- a/sample-apps/fastapi_celery_sample/pyproject.toml +++ b/sample-apps/fastapi_celery_sample/pyproject.toml @@ -8,7 +8,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.8" -FastAPI = "^0.115.0" +FastAPI = "^0.121.0" celery = {extras = ["redis"], version = ">=4.4.0,<6.0.0"} judoscale = { path = "../../", extras=["celery-redis", "fastapi"], develop = true } uvicorn = {extras = ["standard"], version = "^0.31.1"} diff --git a/sample-apps/fastapi_sample/poetry.lock b/sample-apps/fastapi_sample/poetry.lock index 81dc119..f8c38a4 100644 --- a/sample-apps/fastapi_sample/poetry.lock +++ b/sample-apps/fastapi_sample/poetry.lock @@ -1,5 +1,16 @@ # This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +[[package]] +name = "annotated-doc" +version = "0.0.3" +description = "Document parameters, class attributes, return types, and variables inline, with Annotated." +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_doc-0.0.3-py3-none-any.whl", hash = "sha256:348ec6664a76f1fd3be81f43dffbee4c7e8ce931ba71ec67cc7f4ade7fbbb580"}, + {file = "annotated_doc-0.0.3.tar.gz", hash = "sha256:e18370014c70187422c33e945053ff4c286f453a984eba84d0dbfa0c935adeda"}, +] + [[package]] name = "annotated-types" version = "0.7.0" @@ -192,23 +203,25 @@ test = ["pytest (>=6)"] [[package]] name = "fastapi" -version = "0.115.14" +version = "0.121.1" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca"}, - {file = "fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739"}, + {file = "fastapi-0.121.1-py3-none-any.whl", hash = "sha256:2c5c7028bc3a58d8f5f09aecd3fd88a000ccc0c5ad627693264181a3c33aa1fc"}, + {file = "fastapi-0.121.1.tar.gz", hash = "sha256:b6dba0538fd15dab6fe4d3e5493c3957d8a9e1e9257f56446b5859af66f32441"}, ] [package.dependencies] +annotated-doc = ">=0.0.2" pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.40.0,<0.47.0" +starlette = ">=0.40.0,<0.50.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "h11" @@ -337,7 +350,7 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "judoscale" -version = "1.10.1" +version = "1.10.2" description = "Official Python adapter for Judoscale — the advanced autoscaler for Heroku" optional = false python-versions = "^3.8" @@ -914,4 +927,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "bd866deed109fb301638245a39e2db18f08c6001481b4491b06af8d48bc4ad06" +content-hash = "752ade82e6298d7130a64b7a9944012a58257dcb901fc52b4e99055a284c9329" diff --git a/sample-apps/fastapi_sample/pyproject.toml b/sample-apps/fastapi_sample/pyproject.toml index 5dc24a0..82fa879 100644 --- a/sample-apps/fastapi_sample/pyproject.toml +++ b/sample-apps/fastapi_sample/pyproject.toml @@ -12,7 +12,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.8" -FastAPI = "^0.115.0" +FastAPI = "^0.121.0" judoscale = { path = "../../", extras=["asgi"], develop = true } uvicorn = {extras = ["standard"], version = "^0.31.0"} From 212b24c5a4fc6cee9538e0992f87e0193ee0ae0d Mon Sep 17 00:00:00 2001 From: Carlos Antonio da Silva Date: Mon, 10 Nov 2025 17:14:26 -0300 Subject: [PATCH 4/4] Test suggested ENV var to fix the problem for now I'm running into some test trouble with supporting Python v3.8 all the way to v3.14 now, and what seems to be incompatibilities here and there. This fixes the last build issue to get v3.14 working: error: the configured Python interpreter version (3.14) is newer than PyO3's maximum supported version (3.13) = help: please check if an updated version of PyO3 is available. Current version: 0.22.2 = help: set PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 to suppress this check and build anyway using the stable ABI I couldn't find the magic incantation to get the fastapi tests running with the right dependencies across all versions, so using this ENV var for now to get it green. https://github.com/PyO3/pyo3/blob/v0.27.1/CHANGELOG.md#0271---2025-10-21 I'll circle back on it as we will be dropping support to older versions at some point soon hopefully, so for now I just want to get the build on Python v3.14 going. --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index d0fede7..975bb9b 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -56,4 +56,4 @@ jobs: run: cd ./sample-apps/flask_sample && poetry install --all-extras --no-interaction && bin/test - name: Test fast API sample app - run: cd ./sample-apps/fastapi_sample && poetry install --all-extras --no-interaction && bin/test + run: cd ./sample-apps/fastapi_sample && PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 poetry install --all-extras --no-interaction && bin/test