diff --git a/.circleci/config.yml b/.circleci/config.yml index a214c35c..5cf18fcf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -235,6 +235,31 @@ jobs: - store-pytest-results - store-coverage-report + python313: + docker: + - image: python:3.13.0b2-bookworm + - image: cimg/postgres:9.6.24 + environment: + POSTGRES_USER: root + POSTGRES_PASSWORD: passw0rd + POSTGRES_DB: instana_test_db + - image: cimg/mariadb:10.11.2 + environment: + MYSQL_ROOT_PASSWORD: passw0rd + MYSQL_DATABASE: instana_test_db + - image: cimg/redis:5.0.14 + - image: rabbitmq:3.9.13 + - image: mongo:4.2.3 + - image: vanmoof/pubsub-emulator + working_directory: ~/repo + steps: + - checkout + - pip-install-deps: + requirements: "tests/requirements-313.txt" + - run-tests-with-coverage-report + - store-pytest-results + - store-coverage-report + py39couchbase: docker: - image: cimg/python:3.9.17 @@ -303,6 +328,7 @@ workflows: - python310 - python311 - python312 + - python313 - py39cassandra - py39couchbase - py39gevent_starlette @@ -313,6 +339,7 @@ workflows: - python310 - python311 - python312 + - python313 - py39cassandra - py39couchbase - py39gevent_starlette diff --git a/.tekton/pipeline.yaml b/.tekton/pipeline.yaml index 953a364d..17191508 100644 --- a/.tekton/pipeline.yaml +++ b/.tekton/pipeline.yaml @@ -25,16 +25,18 @@ spec: params: - name: imageDigest value: - # 3.8.18-bookworm - - "sha256:625008535504ab68868ca06d1bdd868dee92a9878d5b55fc240af7ceb38b7183" - # 3.9.18-bookworm - - "sha256:530d4ba717be787c0e2d011aa107edac6d721f8c06fe6d44708d4aa5e9bc5ec9" - # 3.10.13-bookworm - - "sha256:c970ff53939772f47b0672e380328afb50d8fd1c0568ed4f82c22effc54244fc" - # 3.11.8-bookworm - - "sha256:72afb375030b13c8c9cb72ba1d8c410f25307c2dbbd7d59f9c6ccea5cb152ff9" - # 3.12.2-bookworm - - "sha256:35eff340c0acd837b7962f77ee4b8869385dd6fe7d3928375a08f0a3bdd18beb" + # 3.8.19-bookworm + - "sha256:4d3590657cf443010b58ae94a09c59505a750744ed70d2028b35dac101df5e3a" + # 3.9.19-bookworm + - "sha256:e298e2e898691a938073f670dac8ef1a551c83344b67b5d8e32d1fbc8e0b57f8" + # 3.10.14-bookworm + - "sha256:c0352a2c64efe4cc08b198e90b97ed7e08897518c4bee99647e3eaf676e84951" + # 3.11.9-bookworm + - "sha256:0c2928128a96e544a1ee248e50ee8ecbe840bf48ef5a49065812e3d06b6e1bcc" + # 3.12.4-bookworm + - "sha256:83f5f8714b6881d3e0e91023d9fe9e43aa6ad5a04e9f9a94ee180b18b021c72a" + # 3.13.0b2-bookworm + - "sha256:6502f02f8a02313f582928ec7159623b54d7c3d627a7e355ca46f4aace406a6a" taskRef: name: python-tracer-unittest-default-task workspaces: @@ -47,8 +49,8 @@ spec: params: - name: imageDigest value: - # 3.9.18-bookworm - - "sha256:530d4ba717be787c0e2d011aa107edac6d721f8c06fe6d44708d4aa5e9bc5ec9" + # 3.9.19-bookworm + - "sha256:e298e2e898691a938073f670dac8ef1a551c83344b67b5d8e32d1fbc8e0b57f8" taskRef: name: python-tracer-unittest-cassandra-task workspaces: @@ -61,8 +63,8 @@ spec: params: - name: imageDigest value: - # 3.9.18-bookworm - - "sha256:530d4ba717be787c0e2d011aa107edac6d721f8c06fe6d44708d4aa5e9bc5ec9" + # 3.9.19-bookworm + - "sha256:e298e2e898691a938073f670dac8ef1a551c83344b67b5d8e32d1fbc8e0b57f8" taskRef: name: python-tracer-unittest-couchbase-task workspaces: diff --git a/.tekton/python-tracer-prepuller.yaml b/.tekton/python-tracer-prepuller.yaml index 3b66ef71..29b14679 100644 --- a/.tekton/python-tracer-prepuller.yaml +++ b/.tekton/python-tracer-prepuller.yaml @@ -49,41 +49,29 @@ spec: # postgres:16.2-bookworm image: postgres@sha256:3bfb87432e26badf72d727a0c5f5bb7b81438cd9baec5be8531c70a42b07adc6 command: ["sh", "-c", "'true'"] - - name: prepuller-30 - # 3.0.6-bullseye - image: ruby@sha256:3166618469ad8a3190d80f43b322818fafb4bfac0b4882255eee3346af2a0a35 - command: ["sh", "-c", "'true'"] - - name: prepuller-31 - # 3.1.4-bookworm - image: ruby@sha256:ec69284bcbceb0a23ffc070ef2e0e8eb0fe495c20efbd51846b103338c3da1e4 - command: ["sh", "-c", "'true'"] - - name: prepuller-32 - # 3.2.3-bookworm - image: ruby@sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed - command: ["sh", "-c", "'true'"] - - name: prepuller-33 - # 3.3.1-bookworm - image: ruby@sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d - command: ["sh", "-c", "'true'"] - name: prepuller-38 - # 3.8.18-bookworm - image: "python@sha256:625008535504ab68868ca06d1bdd868dee92a9878d5b55fc240af7ceb38b7183" + # 3.8.19-bookworm + image: "python@sha256:4d3590657cf443010b58ae94a09c59505a750744ed70d2028b35dac101df5e3a" command: ["sh", "-c", "'true'"] - name: prepuller-39 - # 3.9.18-bookworm - image: "python@sha256:530d4ba717be787c0e2d011aa107edac6d721f8c06fe6d44708d4aa5e9bc5ec9" + # 3.9.19-bookworm + image: "python@sha256:e298e2e898691a938073f670dac8ef1a551c83344b67b5d8e32d1fbc8e0b57f8" command: ["sh", "-c", "'true'"] - name: prepuller-310 - # 3.10.13-bookworm - image: "python@sha256:c970ff53939772f47b0672e380328afb50d8fd1c0568ed4f82c22effc54244fc" + # 3.10.14-bookworm + image: "python@sha256:c0352a2c64efe4cc08b198e90b97ed7e08897518c4bee99647e3eaf676e84951" command: ["sh", "-c", "'true'"] - name: prepuller-311 - # 3.11.8-bookworm - image: "python@sha256:72afb375030b13c8c9cb72ba1d8c410f25307c2dbbd7d59f9c6ccea5cb152ff9" + # 3.11.9-bookworm + image: "python@sha256:0c2928128a96e544a1ee248e50ee8ecbe840bf48ef5a49065812e3d06b6e1bcc" command: ["sh", "-c", "'true'"] - name: prepuller-312 - # 3.12.2-bookworm - image: "python@sha256:35eff340c0acd837b7962f77ee4b8869385dd6fe7d3928375a08f0a3bdd18beb" + # 3.12.4-bookworm + image: "python@sha256:83f5f8714b6881d3e0e91023d9fe9e43aa6ad5a04e9f9a94ee180b18b021c72a" + command: ["sh", "-c", "'true'"] + - name: prepuller-313 + # 3.13.0b2-bookworm + image: "python@sha256:6502f02f8a02313f582928ec7159623b54d7c3d627a7e355ca46f4aace406a6a" command: ["sh", "-c", "'true'"] # Use the pause container to ensure the Pod goes into a `Running` phase diff --git a/.tekton/run_unittests.sh b/.tekton/run_unittests.sh index 0a6054f8..9e1ecd37 100755 --- a/.tekton/run_unittests.sh +++ b/.tekton/run_unittests.sh @@ -22,6 +22,8 @@ default) export REQUIREMENTS='requirements-310.txt' ;; 12) export REQUIREMENTS='requirements-312.txt' ;; + 13) + export REQUIREMENTS='requirements-313.txt' ;; *) export REQUIREMENTS='requirements.txt' ;; esac @@ -59,6 +61,7 @@ if [[ -n "${COUCHBASE_TEST}" ]]; then apt update apt install libcouchbase-dev -y fi + python -m venv /tmp/venv # shellcheck disable=SC1091 source /tmp/venv/bin/activate diff --git a/tests/conftest.py b/tests/conftest.py index 5f5fd99b..4e4baa59 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -38,13 +38,31 @@ # tests/opentracing/test_ot_span.py::TestOTSpan::test_stacks # TODO: Remove that once we find a workaround or DROP opentracing! -if sys.version_info >= (3, 12): - # Currently the dependencies of sanic and aiohttp are not installable on 3.12 - # PyLongObject’ {aka ‘struct _longobject’} has no member named ‘ob_digit’ +if sys.version_info >= (3, 13): + # TODO: Test Case failures for unknown reason: + collect_ignore_glob.append("*test_aiohttp_server*") + collect_ignore_glob.append("*test_celery*") + + # Currently there is a runtime incompatibility caused by the library: + # `undefined symbol: _PyErr_WriteUnraisableMsg` + collect_ignore_glob.append("*boto3*") + + # Currently there is a runtime incompatibility caused by the library: + # `undefined symbol: _PyInterpreterState_Get` + collect_ignore_glob.append("*test_psycopg2*") + collect_ignore_glob.append("*test_sqlalchemy*") + + # Currently the latest version of pyramid depends on the `cgi` module + # which has been deprecated since Python 3.11 and finally removed in 3.13 + # `ModuleNotFoundError: No module named 'cgi'` + collect_ignore_glob.append("*test_pyramid*") + + # Currently not installable dependencies because of 3.13 incompatibilities + collect_ignore_glob.append("*test_fastapi*") + collect_ignore_glob.append("*test_google-cloud-pubsub*") + collect_ignore_glob.append("*test_google-cloud-storage*") + collect_ignore_glob.append("*test_grpcio*") collect_ignore_glob.append("*test_sanic*") - collect_ignore_glob.append("*test_aiohttp*") - # The asyncio also depends on aiohttp - collect_ignore_glob.append("*test_asyncio*") @pytest.fixture(scope='session') def celery_config(): diff --git a/tests/requirements-312.txt b/tests/requirements-312.txt index 530823b0..d4667ec5 100644 --- a/tests/requirements-312.txt +++ b/tests/requirements-312.txt @@ -1,7 +1,5 @@ aiofiles>=0.5.0 -#aiohttp currently depends on yarl which can't be installed: -#PyLongObject’ {aka ‘struct _longobject’} has no member named ‘ob_digit’ -#aiohttp>=3.8.3 +aiohttp>=3.8.3 boto3>=1.17.74 celery>=5.2.7 coverage>=5.5 @@ -34,9 +32,7 @@ pytest>=6.2.4 redis>=3.5.3 requests-mock responses<=0.17.0 -#Sanic depends on uvloop which can't be installed: -#PyLongObject’ {aka ‘struct _longobject’} has no member named ‘ob_digit’ -#sanic==21.6.2 +sanic==21.6.2 sqlalchemy>=2.0.0 spyne>=2.14.0 diff --git a/tests/requirements-313.txt b/tests/requirements-313.txt new file mode 100644 index 00000000..ed419682 --- /dev/null +++ b/tests/requirements-313.txt @@ -0,0 +1,48 @@ +aiofiles>=0.5.0 +aiohttp>=3.8.3 +boto3>=1.17.74 +celery>=5.2.7 +coverage>=5.5 +Django>=5.0a1 --pre +# Dependency orjson has no 3.13 support yet: +# https://github.com/matyasrichter/fastapi-injector/pull/31 +#fastapi>=0.92.0 +flask>=2.3.2 +markupsafe>=2.1.0 +# grpc is not supported on 3.13 yet: +# https://github.com/grpc/grpc/issues/34922 +#grpcio>=1.37.1 +# Depends on grpcio +#google-cloud-pubsub<=2.1.0 +#google-cloud-storage>=1.24.0 +lxml>=4.9.2 +mock>=4.0.3 +moto>=4.1.2 +mysqlclient>=2.0.3 +PyMySQL[rsa]>=1.0.2 +psycopg2-binary>=2.8.6 +pika>=1.2.0 + +# protobuf is pulled in and also `basictracer`, a core instana dependency +# and also by google-cloud-storage +# but also directly needed by tests/apps/grpc_server/stan_pb2.py +# On 4.0.0 we currently get: +# AttributeError: module 'google._upb._message' has no attribute 'Message' +# TODO: Remove this when support for 4.0.0 is done +protobuf<4.0.0 + +pymongo>=3.11.4 +pyramid>=2.0.1 +pytest>=6.2.4 +redis>=3.5.3 +requests-mock +responses<=0.17.0 +# Newer versions of sanic are not supported +# And this old version is not installable on 3.13 because of the `httptools` dependency fails to compile: +# `too few arguments to function ‘_PyLong_AsByteArray’` +#sanic==21.6.2 +sqlalchemy>=2.0.0 +spyne>=2.14.0 + +uvicorn>=0.13.4 +urllib3>=1.26.5