From 11f18224395dc285656620ff693c22f7f5742613 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 4 Sep 2026 11:09:09 -0500 Subject: [PATCH 01/27] PYTHON-6077 Officially support Python 3.15 --- .evergreen/generated_configs/functions.yml | 1 + .evergreen/generated_configs/tasks.yml | 1146 ++++++++++++------- .evergreen/generated_configs/variants.yml | 2 + .evergreen/scripts/fetch-python.sh | 44 + .evergreen/scripts/generate_config.py | 38 +- .evergreen/scripts/generate_config_utils.py | 22 +- .evergreen/scripts/setup-dev-env.sh | 15 + .github/workflows/dist.yml | 4 +- doc/changelog.rst | 7 + pyproject.toml | 1 + 10 files changed, 870 insertions(+), 410 deletions(-) create mode 100755 .evergreen/scripts/fetch-python.sh diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index 9fbc1f8500..4007838e04 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -250,6 +250,7 @@ functions: working_dir: src include_expansions_in_env: - TOOLCHAIN_VERSION + - UV_PYTHON - COVERAGE type: test diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 9fe6b33406..0debb79b6f 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -75,7 +75,7 @@ tasks: SUB_TEST_NAME: session-creds TOOLCHAIN_VERSION: 3.14t tags: [auth-aws, auth-aws-session-creds, free-threaded] - - name: test-auth-aws-9.0-web-identity-python3.14-cov + - name: test-auth-aws-9.0-web-identity-python3.14 commands: - func: run server vars: @@ -87,8 +87,7 @@ tasks: TEST_NAME: auth_aws SUB_TEST_NAME: web-identity TOOLCHAIN_VERSION: "3.14" - COVERAGE: "1" - tags: [auth-aws, auth-aws-web-identity, pr] + tags: [auth-aws, auth-aws-web-identity] - name: test-auth-aws-9.0-web-identity-session-name-python3.14 commands: - func: run server @@ -103,7 +102,7 @@ tasks: AWS_ROLE_SESSION_NAME: test TOOLCHAIN_VERSION: "3.14" tags: [auth-aws, auth-aws-web-identity] - - name: test-auth-aws-rapid-regular-python3.10-min-deps + - name: test-auth-aws-rapid-regular-python3.15.0rc2t commands: - func: run server vars: @@ -114,10 +113,9 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: regular - TOOLCHAIN_VERSION: "3.10" - TEST_MIN_DEPS: "1" - tags: [auth-aws, auth-aws-regular] - - name: test-auth-aws-latest-assume-role-python3.11 + UV_PYTHON: 3.15.0rc2t + tags: [auth-aws, auth-aws-regular, free-threaded] + - name: test-auth-aws-latest-assume-role-python3.15.0rc2-cov commands: - func: run server vars: @@ -128,8 +126,9 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: assume-role - TOOLCHAIN_VERSION: "3.11" - tags: [auth-aws, auth-aws-assume-role] + UV_PYTHON: 3.15.0rc2 + COVERAGE: "1" + tags: [auth-aws, auth-aws-assume-role, pr] - name: test-auth-aws-ecs commands: - func: assume ec2 role @@ -378,6 +377,18 @@ tasks: SUB_TEST_NAME: embedded TOOLCHAIN_VERSION: "3.14" tags: [mod_wsgi, pr] + - name: mod-wsgi-embedded-mode-replica-set-python3.15 + commands: + - func: run server + vars: + TOPOLOGY: replica_set + UV_PYTHON: 3.15.0rc2 + - func: run tests + vars: + TEST_NAME: mod_wsgi + SUB_TEST_NAME: embedded + UV_PYTHON: 3.15.0rc2 + tags: [mod_wsgi, pr] # No orchestration tests - name: test-no-orchestration-python3.10-min-deps @@ -388,13 +399,13 @@ tasks: TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [test-no-orchestration, python-3.10] - - name: test-no-orchestration-python3.14 + - name: test-no-orchestration-python3.15.0rc2 commands: - func: assume ec2 role - func: run tests vars: - TOOLCHAIN_VERSION: "3.14" - tags: [test-no-orchestration, python-3.14] + UV_PYTHON: 3.15.0rc2 + tags: [test-no-orchestration, python-3.15] - name: test-no-orchestration-pypy3.11 commands: - func: assume ec2 role @@ -455,8 +466,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -466,8 +477,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -477,8 +488,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -488,8 +499,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -499,8 +510,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -510,8 +521,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -521,19 +532,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -542,8 +553,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -553,8 +564,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -564,8 +575,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -575,8 +586,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -586,8 +597,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -597,8 +608,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -608,19 +619,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -629,8 +640,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -640,8 +651,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -651,8 +662,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -662,8 +673,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -673,8 +684,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -684,8 +695,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -695,19 +706,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -716,8 +727,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -727,8 +738,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -738,8 +749,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -749,8 +760,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -760,8 +771,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -771,8 +782,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -782,19 +793,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -803,8 +814,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-soft-fail-v5.0-python3.10-min-deps @@ -814,8 +825,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-soft-fail-v6.0-python3.10-min-deps @@ -825,8 +836,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-soft-fail-v7.0-python3.10-min-deps @@ -836,8 +847,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-soft-fail-v8.0-python3.10-min-deps @@ -847,8 +858,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-soft-fail-v9.0-python3.10-min-deps @@ -858,8 +869,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-soft-fail-rapid-python3.10-min-deps @@ -869,19 +880,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-soft-fail-latest-python3.14 + - name: test-ocsp-ecdsa-soft-fail-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -890,8 +901,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -905,8 +916,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -920,8 +931,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -935,8 +946,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -950,8 +961,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -965,8 +976,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -980,23 +991,23 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.14-cov + - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15.0rc2-cov commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 COVERAGE: "1" tags: - ocsp @@ -1011,8 +1022,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1026,8 +1037,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1041,8 +1052,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1056,8 +1067,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1071,8 +1082,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1086,8 +1097,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1101,23 +1112,23 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.14 + - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-ecdsa @@ -1130,8 +1141,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1145,8 +1156,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1160,8 +1171,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1175,8 +1186,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1190,8 +1201,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1205,8 +1216,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1220,23 +1231,23 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.14 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-ecdsa @@ -1249,8 +1260,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1264,8 +1275,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1279,8 +1290,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1294,8 +1305,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1309,8 +1320,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1324,8 +1335,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1339,23 +1350,23 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.14 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-ecdsa @@ -1368,8 +1379,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -1379,8 +1390,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -1390,8 +1401,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -1401,8 +1412,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -1412,8 +1423,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -1423,8 +1434,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -1434,19 +1445,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1455,8 +1466,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -1466,8 +1477,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -1477,8 +1488,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -1488,8 +1499,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -1499,8 +1510,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -1510,8 +1521,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -1521,19 +1532,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1542,8 +1553,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -1553,8 +1564,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -1564,8 +1575,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -1575,8 +1586,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -1586,8 +1597,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -1597,8 +1608,8 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -1608,19 +1619,19 @@ tasks: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.14 + - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: ecdsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1629,8 +1640,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1640,8 +1651,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1651,8 +1662,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1662,8 +1673,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1673,8 +1684,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1684,8 +1695,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1695,19 +1706,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1716,8 +1727,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1727,8 +1738,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1738,8 +1749,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1749,8 +1760,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1760,8 +1771,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1771,8 +1782,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1782,19 +1793,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1803,8 +1814,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1814,8 +1825,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1825,8 +1836,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1836,8 +1847,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1847,8 +1858,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1858,8 +1869,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1869,19 +1880,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1890,8 +1901,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1901,8 +1912,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1912,8 +1923,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1923,8 +1934,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1934,8 +1945,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1945,8 +1956,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1956,19 +1967,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -1977,8 +1988,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-soft-fail-v5.0-python3.10-min-deps @@ -1988,8 +1999,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-soft-fail-v6.0-python3.10-min-deps @@ -1999,8 +2010,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-soft-fail-v7.0-python3.10-min-deps @@ -2010,8 +2021,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-soft-fail-v8.0-python3.10-min-deps @@ -2021,8 +2032,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-soft-fail-v9.0-python3.10-min-deps @@ -2032,8 +2043,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-soft-fail-rapid-python3.10-min-deps @@ -2043,19 +2054,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-soft-fail-latest-python3.14 + - name: test-ocsp-rsa-soft-fail-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -2064,8 +2075,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2079,8 +2090,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2094,8 +2105,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2109,8 +2120,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2124,8 +2135,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2139,8 +2150,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2154,23 +2165,23 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.14-cov + - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15.0rc2-cov commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 COVERAGE: "1" tags: - ocsp @@ -2185,8 +2196,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2200,8 +2211,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2215,8 +2226,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2230,8 +2241,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2245,8 +2256,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2260,8 +2271,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2275,23 +2286,23 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.14 + - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2304,8 +2315,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2319,8 +2330,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2334,8 +2345,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2349,8 +2360,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2364,8 +2375,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2379,8 +2390,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2394,23 +2405,23 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.14 + - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2423,8 +2434,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2438,8 +2449,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2453,8 +2464,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2468,8 +2479,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2483,8 +2494,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2498,8 +2509,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2513,23 +2524,23 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.14 + - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2542,8 +2553,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -2553,8 +2564,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -2564,8 +2575,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -2575,8 +2586,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -2586,8 +2597,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -2597,8 +2608,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -2608,19 +2619,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2629,8 +2640,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -2640,8 +2651,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -2651,8 +2662,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -2662,8 +2673,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -2673,8 +2684,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -2684,8 +2695,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -2695,19 +2706,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2716,8 +2727,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "4.4" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -2727,8 +2738,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "5.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -2738,8 +2749,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "6.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -2749,8 +2760,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "7.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -2760,8 +2771,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "8.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -2771,8 +2782,8 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: "9.0" + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -2782,19 +2793,19 @@ tasks: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.10" VERSION: rapid + TOOLCHAIN_VERSION: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.14 + - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: ORCHESTRATION_FILE: rsa-basic-tls-ocsp-mustStaple-disableStapling.json OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp - TOOLCHAIN_VERSION: "3.14" VERSION: latest + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] # Oidc tests @@ -2909,7 +2920,7 @@ tasks: tags: [search_index] # Server version tests - - name: test-server-version-python3.14t-async-auth-nossl-replica-set + - name: test-server-version-python3.12-async-auth-nossl-replica-set commands: - func: run server vars: @@ -2921,15 +2932,14 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: 3.14t + TOOLCHAIN_VERSION: "3.12" TEST_NAME: default_async tags: - server-version - - python-3.14t + - python-3.12 - replica_set-auth-nossl - async - - free-threaded - - name: test-server-version-python3.13-sync-auth-nossl-replica-set + - name: test-server-version-python3.11-sync-auth-nossl-replica-set commands: - func: run server vars: @@ -2941,33 +2951,35 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.13" + TOOLCHAIN_VERSION: "3.11" TEST_NAME: default_sync tags: - server-version - - python-3.13 + - python-3.11 - replica_set-auth-nossl - sync - - name: test-server-version-python3.12-async-auth-ssl-replica-set + - name: test-server-version-python3.10-async-auth-ssl-replica-set-min-deps commands: - func: run server vars: AUTH: auth SSL: ssl TOPOLOGY: replica_set + TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: auth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.12" + TEST_MIN_DEPS: "1" + TOOLCHAIN_VERSION: "3.10" TEST_NAME: default_async tags: - server-version - - python-3.12 + - python-3.10 - replica_set-auth-ssl - async - - name: test-server-version-python3.11-sync-auth-ssl-replica-set + - name: test-server-version-pypy3.11-sync-auth-ssl-replica-set commands: - func: run server vars: @@ -2979,14 +2991,14 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.11" + TOOLCHAIN_VERSION: pypy3.11 TEST_NAME: default_sync tags: - server-version - - python-3.11 + - python-pypy3.11 - replica_set-auth-ssl - sync - - name: test-server-version-python3.11-async-noauth-nossl-replica-set-cov + - name: test-server-version-python3.15t-async-noauth-nossl-replica-set-cov commands: - func: run server vars: @@ -3000,39 +3012,38 @@ tasks: SSL: nossl TOPOLOGY: replica_set COVERAGE: "1" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - server-version - - python-3.11 + - python-3.15t - replica_set-noauth-nossl - async - pr - - name: test-server-version-python3.10-sync-noauth-nossl-replica-set-min-deps-cov + - free-threaded + - name: test-server-version-python3.14-sync-noauth-nossl-replica-set-cov commands: - func: run server vars: AUTH: noauth SSL: nossl TOPOLOGY: replica_set - TEST_MIN_DEPS: "1" COVERAGE: "1" - func: run tests vars: AUTH: noauth SSL: nossl TOPOLOGY: replica_set - TEST_MIN_DEPS: "1" COVERAGE: "1" - TOOLCHAIN_VERSION: "3.10" + TOOLCHAIN_VERSION: "3.14" TEST_NAME: default_sync tags: - server-version - - python-3.10 + - python-3.14 - replica_set-noauth-nossl - sync - pr - - name: test-server-version-pypy3.11-async-noauth-ssl-replica-set + - name: test-server-version-python3.14t-async-noauth-ssl-replica-set commands: - func: run server vars: @@ -3044,14 +3055,15 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: pypy3.11 + TOOLCHAIN_VERSION: 3.14t TEST_NAME: default_async tags: - server-version - - python-pypy3.11 + - python-3.14t - replica_set-noauth-ssl - async - - name: test-server-version-python3.14-sync-noauth-ssl-replica-set + - free-threaded + - name: test-server-version-python3.13-sync-noauth-ssl-replica-set commands: - func: run server vars: @@ -3063,14 +3075,14 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.14" + TOOLCHAIN_VERSION: "3.13" TEST_NAME: default_sync tags: - server-version - - python-3.14 + - python-3.13 - replica_set-noauth-ssl - sync - - name: test-server-version-python3.14-async-auth-nossl-sharded-cluster + - name: test-server-version-python3.11-async-auth-nossl-sharded-cluster commands: - func: run server vars: @@ -3082,33 +3094,34 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.14" + TOOLCHAIN_VERSION: "3.11" TEST_NAME: default_async tags: - server-version - - python-3.14 + - python-3.11 - sharded_cluster-auth-nossl - async - - name: test-server-version-python3.14t-sync-auth-nossl-sharded-cluster + - name: test-server-version-python3.10-sync-auth-nossl-sharded-cluster-min-deps commands: - func: run server vars: AUTH: auth SSL: nossl TOPOLOGY: sharded_cluster + TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: auth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: 3.14t + TEST_MIN_DEPS: "1" + TOOLCHAIN_VERSION: "3.10" TEST_NAME: default_sync tags: - server-version - - python-3.14t + - python-3.10 - sharded_cluster-auth-nossl - sync - - free-threaded - name: test-server-version-python3.10-async-auth-ssl-sharded-cluster-min-deps-cov commands: - func: run server @@ -3229,6 +3242,45 @@ tasks: - sharded_cluster-auth-ssl - async - free-threaded + - name: test-server-version-python3.15-async-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_async + tags: + - server-version + - python-3.15 + - sharded_cluster-auth-ssl + - async + - name: test-server-version-python3.15t-async-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + UV_PYTHON: 3.15.0rc2t + TEST_NAME: default_async + tags: + - server-version + - python-3.15t + - sharded_cluster-auth-ssl + - async + - free-threaded - name: test-server-version-pypy3.11-async-auth-ssl-sharded-cluster commands: - func: run server @@ -3368,6 +3420,45 @@ tasks: - sharded_cluster-auth-ssl - sync - free-threaded + - name: test-server-version-python3.15-sync-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_sync + tags: + - server-version + - python-3.15 + - sharded_cluster-auth-ssl + - sync + - name: test-server-version-python3.15t-sync-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + UV_PYTHON: 3.15.0rc2t + TEST_NAME: default_sync + tags: + - server-version + - python-3.15t + - sharded_cluster-auth-ssl + - sync + - free-threaded - name: test-server-version-pypy3.11-sync-auth-ssl-sharded-cluster commands: - func: run server @@ -3387,7 +3478,7 @@ tasks: - python-pypy3.11 - sharded_cluster-auth-ssl - sync - - name: test-server-version-python3.12-async-noauth-nossl-sharded-cluster + - name: test-server-version-python3.14-async-noauth-nossl-sharded-cluster commands: - func: run server vars: @@ -3399,14 +3490,14 @@ tasks: AUTH: noauth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.12" + TOOLCHAIN_VERSION: "3.14" TEST_NAME: default_async tags: - server-version - - python-3.12 + - python-3.14 - sharded_cluster-noauth-nossl - async - - name: test-server-version-python3.11-sync-noauth-nossl-sharded-cluster + - name: test-server-version-python3.14t-sync-noauth-nossl-sharded-cluster commands: - func: run server vars: @@ -3418,35 +3509,34 @@ tasks: AUTH: noauth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.11" + TOOLCHAIN_VERSION: 3.14t TEST_NAME: default_sync tags: - server-version - - python-3.11 + - python-3.14t - sharded_cluster-noauth-nossl - sync - - name: test-server-version-python3.10-async-noauth-ssl-sharded-cluster-min-deps + - free-threaded + - name: test-server-version-python3.13-async-noauth-ssl-sharded-cluster commands: - func: run server vars: AUTH: noauth SSL: ssl TOPOLOGY: sharded_cluster - TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: noauth SSL: ssl TOPOLOGY: sharded_cluster - TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + TOOLCHAIN_VERSION: "3.13" TEST_NAME: default_async tags: - server-version - - python-3.10 + - python-3.13 - sharded_cluster-noauth-ssl - async - - name: test-server-version-pypy3.11-sync-noauth-ssl-sharded-cluster + - name: test-server-version-python3.12-sync-noauth-ssl-sharded-cluster commands: - func: run server vars: @@ -3458,11 +3548,11 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: pypy3.11 + TOOLCHAIN_VERSION: "3.12" TEST_NAME: default_sync tags: - server-version - - python-pypy3.11 + - python-3.12 - sharded_cluster-noauth-ssl - sync - name: test-server-version-python3.13-async-auth-nossl-standalone @@ -3543,31 +3633,29 @@ tasks: - python-3.10 - standalone-auth-ssl - sync - - name: test-server-version-python3.10-async-noauth-nossl-standalone-min-deps-cov + - name: test-server-version-python3.15-async-noauth-nossl-standalone-cov commands: - func: run server vars: AUTH: noauth SSL: nossl TOPOLOGY: standalone - TEST_MIN_DEPS: "1" COVERAGE: "1" - func: run tests vars: AUTH: noauth SSL: nossl TOPOLOGY: standalone - TEST_MIN_DEPS: "1" COVERAGE: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_async tags: - server-version - - python-3.10 + - python-3.15 - standalone-noauth-nossl - async - pr - - name: test-server-version-pypy3.11-sync-noauth-nossl-standalone-cov + - name: test-server-version-python3.15t-sync-noauth-nossl-standalone-cov commands: - func: run server vars: @@ -3581,14 +3669,15 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - server-version - - python-pypy3.11 + - python-3.15t - standalone-noauth-nossl - sync - pr + - free-threaded - name: test-server-version-python3.14-async-noauth-ssl-standalone commands: - func: run server @@ -3696,7 +3785,7 @@ tasks: - python-3.12 - sharded_cluster-auth-ssl - sync - - name: test-standard-v4.4-pypy3.11-sync-auth-ssl-sharded-cluster + - name: test-standard-v4.4-python3.15t-sync-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -3710,15 +3799,15 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - test-standard - server-4.4 - - python-pypy3.11 + - python-3.15t - sharded_cluster-auth-ssl - sync - - pypy + - free-threaded - name: test-standard-v4.4-python3.10-sync-noauth-nossl-standalone-min-deps commands: - func: run server @@ -3766,6 +3855,29 @@ tasks: - standalone-noauth-nossl - sync - free-threaded + - name: test-standard-v4.4-pypy3.11-sync-noauth-nossl-standalone + commands: + - func: run server + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "4.4" + - func: run tests + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "4.4" + TOOLCHAIN_VERSION: pypy3.11 + TEST_NAME: default_sync + tags: + - test-standard + - server-4.4 + - python-pypy3.11 + - standalone-noauth-nossl + - sync + - pypy - name: test-standard-v5.0-python3.11-async-noauth-ssl-replica-set commands: - func: run server @@ -3832,7 +3944,7 @@ tasks: - python-3.12 - sharded_cluster-auth-ssl - async - - name: test-standard-v5.0-pypy3.11-async-auth-ssl-sharded-cluster + - name: test-standard-v5.0-python3.15t-async-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -3846,15 +3958,15 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - test-standard - server-5.0 - - python-pypy3.11 + - python-3.15t - sharded_cluster-auth-ssl - async - - pypy + - free-threaded - name: test-standard-v5.0-python3.10-async-noauth-nossl-standalone-min-deps commands: - func: run server @@ -3902,6 +4014,29 @@ tasks: - standalone-noauth-nossl - async - free-threaded + - name: test-standard-v5.0-pypy3.11-async-noauth-nossl-standalone + commands: + - func: run server + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "5.0" + - func: run tests + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "5.0" + TOOLCHAIN_VERSION: pypy3.11 + TEST_NAME: default_async + tags: + - test-standard + - server-5.0 + - python-pypy3.11 + - standalone-noauth-nossl + - async + - pypy - name: test-standard-v6.0-python3.10-sync-noauth-ssl-replica-set-min-deps commands: - func: run server @@ -3949,6 +4084,29 @@ tasks: - replica_set-noauth-ssl - sync - free-threaded + - name: test-standard-v6.0-pypy3.11-sync-noauth-ssl-replica-set + commands: + - func: run server + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "6.0" + - func: run tests + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "6.0" + TOOLCHAIN_VERSION: pypy3.11 + TEST_NAME: default_sync + tags: + - test-standard + - server-6.0 + - python-pypy3.11 + - replica_set-noauth-ssl + - sync + - pypy - name: test-standard-v6.0-python3.11-sync-auth-ssl-sharded-cluster commands: - func: run server @@ -4015,6 +4173,28 @@ tasks: - python-3.13 - standalone-noauth-nossl - sync + - name: test-standard-v6.0-python3.15-sync-noauth-nossl-standalone + commands: + - func: run server + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "6.0" + - func: run tests + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "6.0" + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_sync + tags: + - test-standard + - server-6.0 + - python-3.15 + - standalone-noauth-nossl + - sync - name: test-standard-v7.0-python3.10-async-noauth-ssl-replica-set-min-deps commands: - func: run server @@ -4053,15 +4233,38 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "7.0" - TOOLCHAIN_VERSION: 3.14t + TOOLCHAIN_VERSION: 3.14t + TEST_NAME: default_async + tags: + - test-standard + - server-7.0 + - python-3.14t + - replica_set-noauth-ssl + - async + - free-threaded + - name: test-standard-v7.0-pypy3.11-async-noauth-ssl-replica-set + commands: + - func: run server + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "7.0" + - func: run tests + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "7.0" + TOOLCHAIN_VERSION: pypy3.11 TEST_NAME: default_async tags: - test-standard - server-7.0 - - python-3.14t + - python-pypy3.11 - replica_set-noauth-ssl - async - - free-threaded + - pypy - name: test-standard-v7.0-python3.11-async-auth-ssl-sharded-cluster commands: - func: run server @@ -4128,6 +4331,28 @@ tasks: - python-3.13 - standalone-noauth-nossl - async + - name: test-standard-v7.0-python3.15-async-noauth-nossl-standalone + commands: + - func: run server + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "7.0" + - func: run tests + vars: + AUTH: noauth + SSL: nossl + TOPOLOGY: standalone + VERSION: "7.0" + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_async + tags: + - test-standard + - server-7.0 + - python-3.15 + - standalone-noauth-nossl + - async - name: test-standard-v8.0-python3.13-sync-noauth-ssl-replica-set commands: - func: run server @@ -4150,6 +4375,28 @@ tasks: - python-3.13 - replica_set-noauth-ssl - sync + - name: test-standard-v8.0-python3.15-sync-noauth-ssl-replica-set + commands: + - func: run server + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "8.0" + - func: run tests + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "8.0" + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_sync + tags: + - test-standard + - server-8.0 + - python-3.15 + - replica_set-noauth-ssl + - sync - name: test-standard-v8.0-python3.10-sync-auth-ssl-sharded-cluster-min-deps commands: - func: run server @@ -4197,6 +4444,29 @@ tasks: - sharded_cluster-auth-ssl - sync - free-threaded + - name: test-standard-v8.0-pypy3.11-sync-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: "8.0" + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: "8.0" + TOOLCHAIN_VERSION: pypy3.11 + TEST_NAME: default_sync + tags: + - test-standard + - server-8.0 + - python-pypy3.11 + - sharded_cluster-auth-ssl + - sync + - pypy - name: test-standard-v8.0-python3.12-sync-noauth-nossl-standalone commands: - func: run server @@ -4219,7 +4489,7 @@ tasks: - python-3.12 - standalone-noauth-nossl - sync - - name: test-standard-v8.0-pypy3.11-sync-noauth-nossl-standalone + - name: test-standard-v8.0-python3.15t-sync-noauth-nossl-standalone commands: - func: run server vars: @@ -4233,15 +4503,15 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - test-standard - server-8.0 - - python-pypy3.11 + - python-3.15t - standalone-noauth-nossl - sync - - pypy + - free-threaded - name: test-standard-v9.0-python3.13-async-noauth-ssl-replica-set commands: - func: run server @@ -4264,6 +4534,28 @@ tasks: - python-3.13 - replica_set-noauth-ssl - async + - name: test-standard-v9.0-python3.15-async-noauth-ssl-replica-set + commands: + - func: run server + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "9.0" + - func: run tests + vars: + AUTH: noauth + SSL: ssl + TOPOLOGY: replica_set + VERSION: "9.0" + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_async + tags: + - test-standard + - server-9.0 + - python-3.15 + - replica_set-noauth-ssl + - async - name: test-standard-v9.0-python3.10-async-auth-ssl-sharded-cluster-min-deps commands: - func: run server @@ -4311,6 +4603,29 @@ tasks: - sharded_cluster-auth-ssl - async - free-threaded + - name: test-standard-v9.0-pypy3.11-async-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: "9.0" + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: "9.0" + TOOLCHAIN_VERSION: pypy3.11 + TEST_NAME: default_async + tags: + - test-standard + - server-9.0 + - python-pypy3.11 + - sharded_cluster-auth-ssl + - async + - pypy - name: test-standard-v9.0-python3.12-async-noauth-nossl-standalone commands: - func: run server @@ -4333,7 +4648,7 @@ tasks: - python-3.12 - standalone-noauth-nossl - async - - name: test-standard-v9.0-pypy3.11-async-noauth-nossl-standalone + - name: test-standard-v9.0-python3.15t-async-noauth-nossl-standalone commands: - func: run server vars: @@ -4347,15 +4662,15 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - test-standard - server-9.0 - - python-pypy3.11 + - python-3.15t - standalone-noauth-nossl - async - - pypy + - free-threaded - name: test-standard-latest-python3.12-async-noauth-ssl-replica-set-cov commands: - func: run server @@ -4381,7 +4696,7 @@ tasks: - replica_set-noauth-ssl - async - pr - - name: test-standard-latest-pypy3.11-async-noauth-ssl-replica-set + - name: test-standard-latest-python3.15t-async-noauth-ssl-replica-set-cov commands: - func: run server vars: @@ -4389,21 +4704,24 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: latest + COVERAGE: "1" - func: run tests vars: AUTH: noauth SSL: ssl TOPOLOGY: replica_set VERSION: latest - TOOLCHAIN_VERSION: pypy3.11 + COVERAGE: "1" + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - test-standard - server-latest - - python-pypy3.11 + - python-3.15t - replica_set-noauth-ssl - async - - pypy + - free-threaded + - pr - name: test-standard-latest-python3.13-async-auth-ssl-sharded-cluster-cov commands: - func: run server @@ -4429,6 +4747,31 @@ tasks: - sharded_cluster-auth-ssl - async - pr + - name: test-standard-latest-python3.15-async-auth-ssl-sharded-cluster-cov + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: latest + COVERAGE: "1" + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: latest + COVERAGE: "1" + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_async + tags: + - test-standard + - server-latest + - python-3.15 + - sharded_cluster-auth-ssl + - async + - pr - name: test-standard-latest-python3.11-async-noauth-nossl-standalone-cov commands: - func: run server @@ -4501,7 +4844,7 @@ tasks: - python-3.12 - replica_set-noauth-ssl - sync - - name: test-standard-rapid-pypy3.11-sync-noauth-ssl-replica-set + - name: test-standard-rapid-python3.15t-sync-noauth-ssl-replica-set commands: - func: run server vars: @@ -4515,15 +4858,15 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - test-standard - server-rapid - - python-pypy3.11 + - python-3.15t - replica_set-noauth-ssl - sync - - pypy + - free-threaded - name: test-standard-rapid-python3.13-sync-auth-ssl-sharded-cluster commands: - func: run server @@ -4546,6 +4889,28 @@ tasks: - python-3.13 - sharded_cluster-auth-ssl - sync + - name: test-standard-rapid-python3.15-sync-auth-ssl-sharded-cluster + commands: + - func: run server + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: rapid + - func: run tests + vars: + AUTH: auth + SSL: ssl + TOPOLOGY: sharded_cluster + VERSION: rapid + UV_PYTHON: 3.15.0rc2 + TEST_NAME: default_sync + tags: + - test-standard + - server-rapid + - python-3.15 + - sharded_cluster-auth-ssl + - sync - name: test-standard-rapid-python3.11-sync-noauth-nossl-standalone commands: - func: run server @@ -4592,7 +4957,7 @@ tasks: - sync # String query preview tests - - name: test-string-query-preview-v8.2-python3.14-noauth-ssl-replica-set + - name: test-string-query-preview-v8.2-python3.15-noauth-ssl-replica-set commands: - func: run server vars: @@ -4606,11 +4971,11 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.2" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: 3.15.0rc2 tags: - test-string-query-preview - server-8.2 - - python-3.14 + - python-3.15 - replica_set-noauth-ssl - noauth @@ -4788,7 +5153,7 @@ tasks: - python-3.13 - standalone-noauth-nossl - noauth - - name: test-non-standard-v6.0-python3.11-noauth-ssl-replica-set + - name: test-non-standard-v6.0-python3.15-noauth-ssl-replica-set commands: - func: run server vars: @@ -4802,14 +5167,14 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "6.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard - server-6.0 - - python-3.11 + - python-3.15 - replica_set-noauth-ssl - noauth - - name: test-non-standard-v6.0-python3.12-auth-ssl-sharded-cluster + - name: test-non-standard-v6.0-python3.10-auth-ssl-sharded-cluster-min-deps commands: - func: run server vars: @@ -4817,17 +5182,19 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" + TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" - TOOLCHAIN_VERSION: "3.12" + TEST_MIN_DEPS: "1" + TOOLCHAIN_VERSION: "3.10" tags: - test-non-standard - server-6.0 - - python-3.12 + - python-3.10 - sharded_cluster-auth-ssl - auth - name: test-non-standard-v6.0-pypy3.11-auth-ssl-sharded-cluster @@ -4852,7 +5219,7 @@ tasks: - sharded_cluster-auth-ssl - auth - pypy - - name: test-non-standard-v6.0-python3.10-noauth-nossl-standalone-min-deps + - name: test-non-standard-v6.0-python3.15t-noauth-nossl-standalone commands: - func: run server vars: @@ -4860,22 +5227,21 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: noauth SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: 3.15.0rc2t tags: - test-non-standard - server-6.0 - - python-3.10 + - python-3.15t - standalone-noauth-nossl - noauth - - name: test-non-standard-v7.0-python3.14t-noauth-ssl-replica-set + - free-threaded + - name: test-non-standard-v7.0-python3.12-noauth-ssl-replica-set commands: - func: run server vars: @@ -4889,15 +5255,14 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "7.0" - TOOLCHAIN_VERSION: 3.14t + TOOLCHAIN_VERSION: "3.12" tags: - test-non-standard - server-7.0 - - python-3.14t + - python-3.12 - replica_set-noauth-ssl - noauth - - free-threaded - - name: test-non-standard-v7.0-python3.14-auth-ssl-sharded-cluster + - name: test-non-standard-v7.0-python3.13-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -4911,14 +5276,14 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "7.0" - TOOLCHAIN_VERSION: "3.14" + TOOLCHAIN_VERSION: "3.13" tags: - test-non-standard - server-7.0 - - python-3.14 + - python-3.13 - sharded_cluster-auth-ssl - auth - - name: test-non-standard-v7.0-python3.13-noauth-nossl-standalone + - name: test-non-standard-v7.0-python3.11-noauth-nossl-standalone commands: - func: run server vars: @@ -4932,11 +5297,11 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - TOOLCHAIN_VERSION: "3.13" + TOOLCHAIN_VERSION: "3.11" tags: - test-non-standard - server-7.0 - - python-3.13 + - python-3.11 - standalone-noauth-nossl - noauth - name: test-non-standard-v7.0-pypy3.11-noauth-nossl-standalone @@ -4961,7 +5326,7 @@ tasks: - standalone-noauth-nossl - noauth - pypy - - name: test-non-standard-v8.0-python3.11-noauth-ssl-replica-set + - name: test-non-standard-v8.0-python3.14-noauth-ssl-replica-set commands: - func: run server vars: @@ -4975,11 +5340,11 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - TOOLCHAIN_VERSION: "3.11" + TOOLCHAIN_VERSION: "3.14" tags: - test-non-standard - server-8.0 - - python-3.11 + - python-3.14 - replica_set-noauth-ssl - noauth - name: test-non-standard-v8.0-pypy3.11-noauth-ssl-replica-set @@ -5004,7 +5369,7 @@ tasks: - replica_set-noauth-ssl - noauth - pypy - - name: test-non-standard-v8.0-python3.12-auth-ssl-sharded-cluster + - name: test-non-standard-v8.0-python3.15t-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -5018,14 +5383,15 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: 3.15.0rc2t tags: - test-non-standard - server-8.0 - - python-3.12 + - python-3.15t - sharded_cluster-auth-ssl - auth - - name: test-non-standard-v8.0-python3.10-noauth-nossl-standalone-min-deps + - free-threaded + - name: test-non-standard-v8.0-python3.14t-noauth-nossl-standalone commands: - func: run server vars: @@ -5033,22 +5399,21 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: noauth SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + TOOLCHAIN_VERSION: 3.14t tags: - test-non-standard - server-8.0 - - python-3.10 + - python-3.14t - standalone-noauth-nossl - noauth - - name: test-non-standard-v9.0-python3.14t-noauth-ssl-replica-set + - free-threaded + - name: test-non-standard-v9.0-python3.10-noauth-ssl-replica-set-min-deps commands: - func: run server vars: @@ -5056,21 +5421,22 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "9.0" + TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: noauth SSL: ssl TOPOLOGY: replica_set VERSION: "9.0" - TOOLCHAIN_VERSION: 3.14t + TEST_MIN_DEPS: "1" + TOOLCHAIN_VERSION: "3.10" tags: - test-non-standard - server-9.0 - - python-3.14t + - python-3.10 - replica_set-noauth-ssl - noauth - - free-threaded - - name: test-non-standard-v9.0-python3.14-auth-ssl-sharded-cluster + - name: test-non-standard-v9.0-python3.11-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -5084,11 +5450,11 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: "3.14" + TOOLCHAIN_VERSION: "3.11" tags: - test-non-standard - server-9.0 - - python-3.14 + - python-3.11 - sharded_cluster-auth-ssl - auth - name: test-non-standard-v9.0-pypy3.11-auth-ssl-sharded-cluster @@ -5113,7 +5479,7 @@ tasks: - sharded_cluster-auth-ssl - auth - pypy - - name: test-non-standard-v9.0-python3.13-noauth-nossl-standalone + - name: test-non-standard-v9.0-python3.15-noauth-nossl-standalone commands: - func: run server vars: @@ -5127,14 +5493,14 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard - server-9.0 - - python-3.13 + - python-3.15 - standalone-noauth-nossl - noauth - - name: test-non-standard-latest-python3.14t-noauth-ssl-replica-set + - name: test-non-standard-latest-python3.15t-noauth-ssl-replica-set commands: - func: run server vars: @@ -5148,11 +5514,11 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: latest - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.15.0rc2t tags: - test-non-standard - server-latest - - python-3.14t + - python-3.15t - replica_set-noauth-ssl - noauth - free-threaded @@ -5178,7 +5544,7 @@ tasks: - replica_set-noauth-ssl - noauth - pypy - - name: test-non-standard-latest-python3.14-auth-ssl-sharded-cluster-cov + - name: test-non-standard-latest-python3.15-auth-ssl-sharded-cluster-cov commands: - func: run server vars: @@ -5194,16 +5560,16 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard - server-latest - - python-3.14 + - python-3.15 - sharded_cluster-auth-ssl - auth - pr - cov - - name: test-non-standard-latest-python3.14-auth-ssl-sharded-cluster + - name: test-non-standard-latest-python3.15-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -5217,15 +5583,15 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: latest - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard-no-cov - server-latest - - python-3.14 + - python-3.15 - sharded_cluster-auth-ssl - auth - pr - - name: test-non-standard-latest-python3.13-noauth-nossl-standalone + - name: test-non-standard-latest-python3.14-noauth-nossl-standalone commands: - func: run server vars: @@ -5239,14 +5605,14 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: latest - TOOLCHAIN_VERSION: "3.13" + TOOLCHAIN_VERSION: "3.14" tags: - test-non-standard - server-latest - - python-3.13 + - python-3.14 - standalone-noauth-nossl - noauth - - name: test-non-standard-rapid-python3.11-noauth-ssl-replica-set + - name: test-non-standard-rapid-python3.13-noauth-ssl-replica-set commands: - func: run server vars: @@ -5260,14 +5626,14 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - TOOLCHAIN_VERSION: "3.11" + TOOLCHAIN_VERSION: "3.13" tags: - test-non-standard - server-rapid - - python-3.11 + - python-3.13 - replica_set-noauth-ssl - noauth - - name: test-non-standard-rapid-python3.12-auth-ssl-sharded-cluster + - name: test-non-standard-rapid-python3.14t-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -5281,14 +5647,15 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - TOOLCHAIN_VERSION: "3.12" + TOOLCHAIN_VERSION: 3.14t tags: - test-non-standard - server-rapid - - python-3.12 + - python-3.14t - sharded_cluster-auth-ssl - auth - - name: test-non-standard-rapid-python3.10-noauth-nossl-standalone-min-deps + - free-threaded + - name: test-non-standard-rapid-python3.12-noauth-nossl-standalone commands: - func: run server vars: @@ -5296,19 +5663,17 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: rapid - TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: noauth SSL: nossl TOPOLOGY: standalone VERSION: rapid - TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + TOOLCHAIN_VERSION: "3.12" tags: - test-non-standard - server-rapid - - python-3.10 + - python-3.12 - standalone-noauth-nossl - noauth - name: test-non-standard-rapid-pypy3.11-noauth-nossl-standalone @@ -5345,16 +5710,16 @@ tasks: - vector - python-3.10 - test-numpy - - name: test-numpy-python3.14-python3.14-cov + - name: test-numpy-python3.15-python3.15.0rc2-cov commands: - func: test numpy vars: - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: 3.15.0rc2 COVERAGE: "1" tags: - binary - vector - - python-3.14 + - python-3.15 - test-numpy - pr @@ -5620,7 +5985,7 @@ tasks: - sharded_cluster-auth-ssl - auth - pypy - - name: test-standard-auth-latest-python3.11-auth-ssl-sharded-cluster-cov + - name: test-standard-auth-latest-python3.15-auth-ssl-sharded-cluster-cov commands: - func: run server vars: @@ -5636,11 +6001,11 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: 3.15.0rc2 tags: - test-standard-auth - server-latest - - python-3.11 + - python-3.15 - sharded_cluster-auth-ssl - auth - pr @@ -5666,7 +6031,7 @@ tasks: - sharded_cluster-auth-ssl - auth - pypy - - name: test-standard-auth-rapid-python3.10-auth-ssl-sharded-cluster-min-deps + - name: test-standard-auth-rapid-python3.15t-auth-ssl-sharded-cluster commands: - func: run server vars: @@ -5674,21 +6039,20 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - TEST_MIN_DEPS: "1" - func: run tests vars: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: 3.15.0rc2t tags: - test-standard-auth - server-rapid - - python-3.10 + - python-3.15t - sharded_cluster-auth-ssl - auth + - free-threaded - name: test-standard-auth-rapid-pypy3.11-auth-ssl-sharded-cluster commands: - func: run server diff --git a/.evergreen/generated_configs/variants.yml b/.evergreen/generated_configs/variants.yml index 72af2599f7..cc822ab8b0 100644 --- a/.evergreen/generated_configs/variants.yml +++ b/.evergreen/generated_configs/variants.yml @@ -144,6 +144,8 @@ buildvariants: tasks: - name: .test-standard !.server-4.4 !.server-5.0 .python-3.14 - name: .test-standard !.server-4.4 !.server-5.0 .python-3.14t + - name: .test-standard !.server-4.4 !.server-5.0 .python-3.15 + - name: .test-standard !.server-4.4 !.server-5.0 .python-3.15t display_name: Compression zstd Ubuntu-22 run_on: - ubuntu2204-small diff --git a/.evergreen/scripts/fetch-python.sh b/.evergreen/scripts/fetch-python.sh new file mode 100755 index 0000000000..494d251848 --- /dev/null +++ b/.evergreen/scripts/fetch-python.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Download a Python build from python-build-standalone and print the directory +# uv should use for it. Temporary: uv does not yet index Python 3.15 +# pre-releases, so we fetch the build ourselves until the version is available +# in the Evergreen toolchain. See PYTHON-6077. +set -eu + +version="${UV_PYTHON:?UV_PYTHON must be set}" +# python-build-standalone release tag that carries the builds below. +pbs_tag="20260901" + +case "$version" in + 3.15.0rc2t) interpreter="3.15.0rc2"; variant="-freethreaded" ;; + 3.15.0rc2) interpreter="3.15.0rc2"; variant="" ;; + *) echo "No python-build-standalone build configured for Python $version" >&2; exit 1 ;; +esac + +case "$(uname -s)" in + Darwin) target_os="-apple-darwin"; base_dir="${HOME}" ;; + Linux) target_os="-unknown-linux-gnu"; base_dir="${HOME}" ;; + MSYS* | MINGW* | CYGWIN*) target_os="-pc-windows-msvc"; base_dir="${USERPROFILE:-$HOME}" ;; + *) echo "Unsupported platform $(uname -s)" >&2; exit 1 ;; +esac + +case "$(uname -m)" in + arm64 | aarch64) target_arch="aarch64" ;; + x86_64) target_arch="x86_64" ;; + *) echo "Unsupported architecture $(uname -m)" >&2; exit 1 ;; +esac + +asset="cpython-${interpreter}+${pbs_tag}-${target_arch}${target_os}${variant}-install_only.tar.gz" +url="https://github.com/astral-sh/python-build-standalone/releases/download/${pbs_tag}/${asset//+/%2B}" + +# Use a native path on Windows: bash reports MSYS paths (e.g. /home/user) +# that the native Windows uv binary cannot resolve. Normalize backslashes +# to forward slashes, which both uv and the shell's tar accept. +dest="${base_dir}/.cache/python-build-standalone/${version}/${target_arch}${target_os}" +dest="$(printf '%s' "$dest" | tr '\\' '/')" +if [ ! -d "$dest/python" ]; then + mkdir -p "$dest" + echo "Downloading Python ${version} from python-build-standalone" >&2 + curl -fL --retry 3 "$url" | tar -xz -C "$dest" +fi +echo "$dest/python" diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index aaded3130c..631aaedccb 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -27,6 +27,7 @@ get_variant_name, get_versions_from, handle_c_ext, + set_version_var, write_functions_to_file, write_tasks_to_file, write_variants_to_file, @@ -208,6 +209,8 @@ def create_compression_variants(): tasks = [ ".test-standard !.server-4.4 !.server-5.0 .python-3.14", ".test-standard !.server-4.4 !.server-5.0 .python-3.14t", + ".test-standard !.server-4.4 !.server-5.0 .python-3.15", + ".test-standard !.server-4.4 !.server-5.0 .python-3.15t", ] display_name = get_variant_name(f"Compression {compressor}", host) variants.append( @@ -353,7 +356,8 @@ def create_test_numpy_tasks(): tasks = [] for python in MIN_MAX_PYTHON: tags = ["binary", "vector", f"python-{python}", "test-numpy"] - vars = dict(TOOLCHAIN_VERSION=python) + vars = dict() + set_version_var(vars, python) if python == MIN_MAX_PYTHON[-1]: tags.append("pr") vars["COVERAGE"] = "1" @@ -633,7 +637,7 @@ def create_server_version_tasks(): ) server_func = FunctionCall(func="run server", vars=expansions) test_vars = expansions.copy() - test_vars["TOOLCHAIN_VERSION"] = python + set_version_var(test_vars, python) test_vars["TEST_NAME"] = f"default_{sync}" test_func = FunctionCall(func="run tests", vars=test_vars) tasks.append(EvgTask(name=name, tags=tags, commands=[server_func, test_func])) @@ -695,7 +699,7 @@ def create_test_non_standard_tasks(): name = get_task_name("test-non-standard", python=python, **expansions) server_func = FunctionCall(func="run server", vars=expansions) test_vars = expansions.copy() - test_vars["TOOLCHAIN_VERSION"] = python + set_version_var(test_vars, python) test_func = FunctionCall(func="run tests", vars=test_vars) tasks.append(EvgTask(name=name, tags=tags, commands=[server_func, test_func])) # For each coverage task, also emit a non-coverage companion so that @@ -713,7 +717,7 @@ def create_test_non_standard_tasks(): nc_name = get_task_name("test-non-standard", python=python, **nc_expansions) nc_server_func = FunctionCall(func="run server", vars=nc_expansions) nc_test_vars = nc_expansions.copy() - nc_test_vars["TOOLCHAIN_VERSION"] = python + set_version_var(nc_test_vars, python) nc_test_func = FunctionCall(func="run tests", vars=nc_test_vars) tasks.append( EvgTask(name=nc_name, tags=nc_tags, commands=[nc_server_func, nc_test_func]) @@ -744,7 +748,7 @@ def create_string_query_preview_tasks(): name = get_task_name("test-string-query-preview", python=python, **expansions) server_func = FunctionCall(func="run server", vars=expansions) test_vars = expansions.copy() - test_vars["TOOLCHAIN_VERSION"] = python + set_version_var(test_vars, python) test_func = FunctionCall(func="run tests", vars=test_vars) return [EvgTask(name=name, tags=tags, commands=[server_func, test_func])] @@ -787,7 +791,7 @@ def create_test_standard_auth_tasks(): name = get_task_name("test-standard-auth", python=python, **expansions) server_func = FunctionCall(func="run server", vars=expansions) test_vars = expansions.copy() - test_vars["TOOLCHAIN_VERSION"] = python + set_version_var(test_vars, python) test_func = FunctionCall(func="run tests", vars=test_vars) tasks.append(EvgTask(name=name, tags=tags, commands=[server_func, test_func])) return tasks @@ -827,7 +831,7 @@ def create_standard_tasks(): name = get_task_name("test-standard", python=python, sync=sync, **expansions) server_func = FunctionCall(func="run server", vars=expansions) test_vars = expansions.copy() - test_vars["TOOLCHAIN_VERSION"] = python + set_version_var(test_vars, python) test_vars["TEST_NAME"] = f"default_{sync}" test_func = FunctionCall(func="run tests", vars=test_vars) tasks.append(EvgTask(name=name, tags=tags, commands=[server_func, test_func])) @@ -842,7 +846,8 @@ def create_no_orchestration_tasks(): f"python-{python}", ] assume_func = FunctionCall(func="assume ec2 role") - test_vars = dict(TOOLCHAIN_VERSION=python) + test_vars = dict() + set_version_var(test_vars, python) if python == ALL_PYTHONS[0]: test_vars["TEST_MIN_DEPS"] = "1" name = get_task_name("test-no-orchestration", **test_vars) @@ -892,7 +897,8 @@ def create_aws_tasks(): tags = [*base_tags, f"auth-aws-{test_type}"] if "t" in python: tags.append("free-threaded") - test_vars = dict(TEST_NAME="auth_aws", SUB_TEST_NAME=test_type, TOOLCHAIN_VERSION=python) + test_vars = dict(TEST_NAME="auth_aws", SUB_TEST_NAME=test_type) + set_version_var(test_vars, python) if python == MIN_MAX_PYTHON[0]: test_vars["TEST_MIN_DEPS"] = "1" elif python == MIN_MAX_PYTHON[-1]: @@ -910,8 +916,8 @@ def create_aws_tasks(): TEST_NAME="auth_aws", SUB_TEST_NAME="web-identity", AWS_ROLE_SESSION_NAME="test", - TOOLCHAIN_VERSION=python, ) + set_version_var(test_vars, python) if "t" in python: tags.append("free-threaded") test_func = FunctionCall(func="run tests", vars=test_vars) @@ -958,11 +964,11 @@ def create_mod_wsgi_tasks(): task_name = "mod-wsgi-embedded-mode-" task_name += topology.replace("_", "-") task_name = get_task_name(task_name, python=python) - server_vars = dict(TOPOLOGY=topology, TOOLCHAIN_VERSION=python) + server_vars = dict(TOPOLOGY=topology) + set_version_var(server_vars, python) server_func = FunctionCall(func="run server", vars=server_vars) - vars = dict( - TEST_NAME="mod_wsgi", SUB_TEST_NAME=test.split("-")[0], TOOLCHAIN_VERSION=python - ) + vars = dict(TEST_NAME="mod_wsgi", SUB_TEST_NAME=test.split("-")[0]) + set_version_var(vars, python) test_func = FunctionCall(func="run tests", vars=vars) tags = ["mod_wsgi", "pr"] commands = [server_func, test_func] @@ -984,9 +990,9 @@ def _create_ocsp_tasks(algo, variant, server_type, base_task_name): ORCHESTRATION_FILE=file_name, OCSP_SERVER_TYPE=server_type, TEST_NAME="ocsp", - TOOLCHAIN_VERSION=python, VERSION=version, ) + set_version_var(vars, python) if python == ALL_PYTHONS[0]: vars["TEST_MIN_DEPS"] = "1" tags = ["ocsp", f"ocsp-{algo}", version] @@ -1316,7 +1322,7 @@ def create_run_tests_func(): def create_test_numpy_func(): - includes = ["TOOLCHAIN_VERSION", "COVERAGE"] + includes = ["TOOLCHAIN_VERSION", "UV_PYTHON", "COVERAGE"] test_cmd = get_subprocess_exec( include_expansions_in_env=includes, args=[".evergreen/just.sh", "test-numpy"] ) diff --git a/.evergreen/scripts/generate_config_utils.py b/.evergreen/scripts/generate_config_utils.py index 296d4e2416..138602564c 100644 --- a/.evergreen/scripts/generate_config_utils.py +++ b/.evergreen/scripts/generate_config_utils.py @@ -22,11 +22,29 @@ ############## ALL_VERSIONS = ["4.4", "5.0", "6.0", "7.0", "8.0", "9.0", "rapid", "latest"] -CPYTHONS = ["3.10", "3.11", "3.12", "3.13", "3.14t", "3.14"] +CPYTHONS = ["3.10", "3.11", "3.12", "3.13", "3.14t", "3.14", "3.15t", "3.15"] PYPYS = ["pypy3.11"] MIN_SUPPORT_VERSIONS = ["3.9", "pypy3.9", "pypy3.10"] ALL_PYTHONS = CPYTHONS + PYPYS MIN_MAX_PYTHON = [CPYTHONS[0], CPYTHONS[-1]] +# Python versions not yet provisioned in the Evergreen toolchain, mapped to +# the exact version uv must be requested to install (uv only installs a +# pre-release when asked for its full version). Drop an entry once the +# toolchain provides the version. +UV_PYTHON_VERSIONS = { + "3.15": "3.15.0rc2", + "3.15t": "3.15.0rc2t", +} + + +def set_version_var(env: dict[str, str], version: str) -> None: + """Set the env var on task vars that selects the given Python version.""" + if version in UV_PYTHON_VERSIONS: + env["UV_PYTHON"] = UV_PYTHON_VERSIONS[version] + else: + env["TOOLCHAIN_VERSION"] = version + + BATCHTIME_WEEK = 10080 BATCHTIME_DAY = 1440 AUTH_SSLS = [("auth", "ssl"), ("noauth", "ssl"), ("noauth", "nossl")] @@ -178,7 +196,7 @@ def get_common_name(base: str, sep: str, **kwargs) -> str: display_name = f"{display_name}{sep}{version}" for key, value in kwargs.items(): name = value - if key.lower() in ["python", "toolchain_version"]: + if key.lower() in ["python", "toolchain_version", "uv_python"]: if not value.startswith("pypy"): name = f"Python{value}" else: diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index e58d6210fe..fbfcf999a2 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -19,6 +19,21 @@ fi # Handle the value for UV_PYTHON. . $HERE/setup-uv-python.sh +# Ensure a bare-version interpreter is available before it is used. uv +# downloads a managed Python only on explicit request and never offers Python +# pre-releases, so try `uv python install` first and fall back to fetching the +# build ourselves. The fallback is temporary until these versions are in the +# Evergreen toolchain. +if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then + if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then + _interpreter="$(bash $HERE/fetch-python.sh)" || { + echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 + exit 1 + } + export UV_PYTHON="$_interpreter" + fi +fi + # Ensure dependencies are installed. bash $HERE/install-dependencies.sh diff --git a/.github/workflows/dist.yml b/.github/workflows/dist.yml index a68e2e6281..4a8f60eed7 100644 --- a/.github/workflows/dist.yml +++ b/.github/workflows/dist.yml @@ -73,7 +73,7 @@ jobs: # Note: the default manylinux is manylinux_2_28 run: | python -m pip install -U pip - python -m pip install "cibuildwheel>=3.2.0,<4" + python -m pip install "cibuildwheel>=4.2.0,<5" - name: Build wheels env: @@ -92,8 +92,10 @@ jobs: ls wheelhouse/*cp312*.whl ls wheelhouse/*cp313*.whl ls wheelhouse/*cp314*.whl + ls wheelhouse/*cp315*.whl # Free-threading builds: ls wheelhouse/*cp314t*.whl + ls wheelhouse/*cp315t*.whl - uses: actions/upload-artifact@v7 with: diff --git a/doc/changelog.rst b/doc/changelog.rst index d2f49b7fd8..cfb176cc9f 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -1,6 +1,13 @@ Changelog ========= +Changes in Version 4.19.0 (2026/XX/XX) +-------------------------------------- + +PyMongo 4.19 brings a number of changes including: + +- Added support for Python 3.15. + Changes in Version 4.18.0 (2026/09/03) -------------------------------------- diff --git a/pyproject.toml b/pyproject.toml index 346df2f427..2adddcd29b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Database", "Typing :: Typed", ] From 82afc1a9425dd86a2c35b9d0c9fc14a60e761553 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 4 Sep 2026 17:21:05 -0500 Subject: [PATCH 02/27] PYTHON-6077 Always use UV_PYTHON and prefer toolchain pythons --- .evergreen/generated_configs/functions.yml | 3 - .evergreen/generated_configs/tasks.yml | 608 ++++++++++---------- .evergreen/scripts/generate_config.py | 7 +- .evergreen/scripts/generate_config_utils.py | 9 +- .evergreen/scripts/setup-uv-python.sh | 77 +-- 5 files changed, 355 insertions(+), 349 deletions(-) diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index 4007838e04..57f1182377 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -102,7 +102,6 @@ functions: - SSL - ORCHESTRATION_FILE - UV_PYTHON - - TOOLCHAIN_VERSION - STORAGE_ENGINE - REQUIRE_API_VERSION - DRIVERS_TOOLS @@ -137,7 +136,6 @@ functions: - UV_PYTHON - LIBMONGOCRYPT_URL - MONGODB_URI - - TOOLCHAIN_VERSION - DISABLE_TEST_COMMANDS - GREEN_FRAMEWORK - NO_EXT @@ -249,7 +247,6 @@ functions: - test-numpy working_dir: src include_expansions_in_env: - - TOOLCHAIN_VERSION - UV_PYTHON - COVERAGE type: test diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 0debb79b6f..d604770728 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -20,7 +20,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: regular - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [auth-aws, auth-aws-regular] - name: test-auth-aws-5.0-assume-role-python3.11 @@ -34,7 +34,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: assume-role - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" tags: [auth-aws, auth-aws-assume-role] - name: test-auth-aws-6.0-ec2-python3.12 commands: @@ -47,7 +47,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: ec2 - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" tags: [auth-aws, auth-aws-ec2] - name: test-auth-aws-7.0-env-creds-python3.13 commands: @@ -60,7 +60,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: env-creds - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" tags: [auth-aws, auth-aws-env-creds] - name: test-auth-aws-8.0-session-creds-python3.14t commands: @@ -73,7 +73,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: session-creds - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t tags: [auth-aws, auth-aws-session-creds, free-threaded] - name: test-auth-aws-9.0-web-identity-python3.14 commands: @@ -86,7 +86,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: web-identity - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: [auth-aws, auth-aws-web-identity] - name: test-auth-aws-9.0-web-identity-session-name-python3.14 commands: @@ -100,7 +100,7 @@ tasks: TEST_NAME: auth_aws SUB_TEST_NAME: web-identity AWS_ROLE_SESSION_NAME: test - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: [auth-aws, auth-aws-web-identity] - name: test-auth-aws-rapid-regular-python3.15.0rc2t commands: @@ -322,60 +322,60 @@ tasks: - func: run server vars: TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: standalone - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: [mod_wsgi, pr] - name: mod-wsgi-embedded-mode-replica-set-python3.11 commands: - func: run server vars: TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: embedded - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" tags: [mod_wsgi, pr] - name: mod-wsgi-replica-set-python3.12 commands: - func: run server vars: TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: standalone - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" tags: [mod_wsgi, pr] - name: mod-wsgi-embedded-mode-replica-set-python3.13 commands: - func: run server vars: TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: embedded - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" tags: [mod_wsgi, pr] - name: mod-wsgi-embedded-mode-replica-set-python3.14 commands: - func: run server vars: TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: embedded - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: [mod_wsgi, pr] - name: mod-wsgi-embedded-mode-replica-set-python3.15 commands: @@ -396,7 +396,7 @@ tasks: - func: assume ec2 role - func: run tests vars: - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [test-no-orchestration, python-3.10] - name: test-no-orchestration-python3.15.0rc2 @@ -411,7 +411,7 @@ tasks: - func: assume ec2 role - func: run tests vars: - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: [test-no-orchestration, python-pypy3.11] # No toolchain tests @@ -467,7 +467,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -478,7 +478,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -489,7 +489,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -500,7 +500,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -511,7 +511,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -522,7 +522,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -533,7 +533,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -554,7 +554,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -565,7 +565,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -576,7 +576,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -587,7 +587,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -598,7 +598,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -609,7 +609,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -620,7 +620,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -641,7 +641,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -652,7 +652,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -663,7 +663,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -674,7 +674,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -685,7 +685,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -696,7 +696,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -707,7 +707,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -728,7 +728,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -739,7 +739,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -750,7 +750,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -761,7 +761,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -772,7 +772,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -783,7 +783,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -794,7 +794,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -815,7 +815,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-soft-fail-v5.0-python3.10-min-deps @@ -826,7 +826,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-soft-fail-v6.0-python3.10-min-deps @@ -837,7 +837,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-soft-fail-v7.0-python3.10-min-deps @@ -848,7 +848,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-soft-fail-v8.0-python3.10-min-deps @@ -859,7 +859,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-soft-fail-v9.0-python3.10-min-deps @@ -870,7 +870,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-soft-fail-rapid-python3.10-min-deps @@ -881,7 +881,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-soft-fail-latest-python3.15.0rc2 @@ -902,7 +902,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -917,7 +917,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -932,7 +932,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -947,7 +947,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -962,7 +962,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -977,7 +977,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -992,7 +992,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1023,7 +1023,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1038,7 +1038,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1053,7 +1053,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1068,7 +1068,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1083,7 +1083,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1098,7 +1098,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1113,7 +1113,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1142,7 +1142,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1157,7 +1157,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1172,7 +1172,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1187,7 +1187,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1202,7 +1202,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1217,7 +1217,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1232,7 +1232,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1261,7 +1261,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1276,7 +1276,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1291,7 +1291,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1306,7 +1306,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1321,7 +1321,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1336,7 +1336,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1351,7 +1351,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -1380,7 +1380,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -1391,7 +1391,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -1402,7 +1402,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -1413,7 +1413,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -1424,7 +1424,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -1435,7 +1435,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -1446,7 +1446,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 @@ -1467,7 +1467,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -1478,7 +1478,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -1489,7 +1489,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -1500,7 +1500,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -1511,7 +1511,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -1522,7 +1522,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -1533,7 +1533,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 @@ -1554,7 +1554,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "4.4"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -1565,7 +1565,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "5.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -1576,7 +1576,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "6.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -1587,7 +1587,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "7.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -1598,7 +1598,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "8.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -1609,7 +1609,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, "9.0"] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -1620,7 +1620,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 @@ -1641,7 +1641,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1652,7 +1652,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1663,7 +1663,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1674,7 +1674,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1685,7 +1685,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1696,7 +1696,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1707,7 +1707,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -1728,7 +1728,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1739,7 +1739,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1750,7 +1750,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1761,7 +1761,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1772,7 +1772,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1783,7 +1783,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1794,7 +1794,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -1815,7 +1815,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1826,7 +1826,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1837,7 +1837,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1848,7 +1848,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1859,7 +1859,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1870,7 +1870,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1881,7 +1881,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -1902,7 +1902,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v5.0-python3.10-min-deps @@ -1913,7 +1913,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v6.0-python3.10-min-deps @@ -1924,7 +1924,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v7.0-python3.10-min-deps @@ -1935,7 +1935,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v8.0-python3.10-min-deps @@ -1946,7 +1946,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v9.0-python3.10-min-deps @@ -1957,7 +1957,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-rapid-python3.10-min-deps @@ -1968,7 +1968,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 @@ -1989,7 +1989,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-soft-fail-v5.0-python3.10-min-deps @@ -2000,7 +2000,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-soft-fail-v6.0-python3.10-min-deps @@ -2011,7 +2011,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-soft-fail-v7.0-python3.10-min-deps @@ -2022,7 +2022,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-soft-fail-v8.0-python3.10-min-deps @@ -2033,7 +2033,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-soft-fail-v9.0-python3.10-min-deps @@ -2044,7 +2044,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-soft-fail-rapid-python3.10-min-deps @@ -2055,7 +2055,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-soft-fail-latest-python3.15.0rc2 @@ -2076,7 +2076,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2091,7 +2091,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2106,7 +2106,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2121,7 +2121,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2136,7 +2136,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2151,7 +2151,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2166,7 +2166,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2197,7 +2197,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2212,7 +2212,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2227,7 +2227,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2242,7 +2242,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2257,7 +2257,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2272,7 +2272,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2287,7 +2287,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2316,7 +2316,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2331,7 +2331,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2346,7 +2346,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2361,7 +2361,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2376,7 +2376,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2391,7 +2391,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2406,7 +2406,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2435,7 +2435,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2450,7 +2450,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2465,7 +2465,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2480,7 +2480,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2495,7 +2495,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2510,7 +2510,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2525,7 +2525,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: - ocsp @@ -2554,7 +2554,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -2565,7 +2565,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -2576,7 +2576,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -2587,7 +2587,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -2598,7 +2598,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -2609,7 +2609,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -2620,7 +2620,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 @@ -2641,7 +2641,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -2652,7 +2652,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -2663,7 +2663,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -2674,7 +2674,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -2685,7 +2685,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -2696,7 +2696,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -2707,7 +2707,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 @@ -2728,7 +2728,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "4.4" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "4.4"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v5.0-python3.10-min-deps @@ -2739,7 +2739,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "5.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "5.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v6.0-python3.10-min-deps @@ -2750,7 +2750,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "6.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "6.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v7.0-python3.10-min-deps @@ -2761,7 +2761,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "7.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "7.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v8.0-python3.10-min-deps @@ -2772,7 +2772,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "8.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "8.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v9.0-python3.10-min-deps @@ -2783,7 +2783,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: "9.0" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, "9.0"] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-rapid-python3.10-min-deps @@ -2794,7 +2794,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: rapid - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 @@ -2916,7 +2916,7 @@ tasks: - func: run tests vars: TEST_NAME: search_index - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: [search_index] # Server version tests @@ -2932,7 +2932,7 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_async tags: - server-version @@ -2951,7 +2951,7 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_sync tags: - server-version @@ -2972,7 +2972,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_async tags: - server-version @@ -2991,7 +2991,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_sync tags: - server-version @@ -3035,7 +3035,7 @@ tasks: SSL: nossl TOPOLOGY: replica_set COVERAGE: "1" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_sync tags: - server-version @@ -3055,7 +3055,7 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_async tags: - server-version @@ -3075,7 +3075,7 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: replica_set - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_sync tags: - server-version @@ -3094,7 +3094,7 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_async tags: - server-version @@ -3115,7 +3115,7 @@ tasks: SSL: nossl TOPOLOGY: sharded_cluster TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_sync tags: - server-version @@ -3138,7 +3138,7 @@ tasks: TOPOLOGY: sharded_cluster TEST_MIN_DEPS: "1" COVERAGE: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_async tags: - server-version @@ -3158,7 +3158,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_async tags: - server-version @@ -3177,7 +3177,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_async tags: - server-version @@ -3196,7 +3196,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_async tags: - server-version @@ -3215,7 +3215,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_async tags: - server-version @@ -3234,7 +3234,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_async tags: - server-version @@ -3293,7 +3293,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_async tags: - server-version @@ -3316,7 +3316,7 @@ tasks: TOPOLOGY: sharded_cluster TEST_MIN_DEPS: "1" COVERAGE: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_sync tags: - server-version @@ -3336,7 +3336,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_sync tags: - server-version @@ -3355,7 +3355,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_sync tags: - server-version @@ -3374,7 +3374,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_sync tags: - server-version @@ -3393,7 +3393,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_sync tags: - server-version @@ -3412,7 +3412,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_sync tags: - server-version @@ -3471,7 +3471,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_sync tags: - server-version @@ -3490,7 +3490,7 @@ tasks: AUTH: noauth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_async tags: - server-version @@ -3509,7 +3509,7 @@ tasks: AUTH: noauth SSL: nossl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_sync tags: - server-version @@ -3529,7 +3529,7 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_async tags: - server-version @@ -3548,7 +3548,7 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: sharded_cluster - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_sync tags: - server-version @@ -3567,7 +3567,7 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: standalone - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_async tags: - server-version @@ -3586,7 +3586,7 @@ tasks: AUTH: auth SSL: nossl TOPOLOGY: standalone - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_sync tags: - server-version @@ -3605,7 +3605,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: standalone - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_async tags: - server-version @@ -3626,7 +3626,7 @@ tasks: SSL: ssl TOPOLOGY: standalone TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_sync tags: - server-version @@ -3690,7 +3690,7 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: standalone - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_async tags: - server-version @@ -3709,7 +3709,7 @@ tasks: AUTH: noauth SSL: ssl TOPOLOGY: standalone - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_sync tags: - server-version @@ -3733,7 +3733,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "4.4" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_sync tags: - test-standard @@ -3755,7 +3755,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "4.4" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_sync tags: - test-standard @@ -3777,7 +3777,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_sync tags: - test-standard @@ -3824,7 +3824,7 @@ tasks: TOPOLOGY: standalone VERSION: "4.4" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_sync tags: - test-standard @@ -3846,7 +3846,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "4.4" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_sync tags: - test-standard @@ -3869,7 +3869,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "4.4" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_sync tags: - test-standard @@ -3892,7 +3892,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "5.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_async tags: - test-standard @@ -3914,7 +3914,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "5.0" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_async tags: - test-standard @@ -3936,7 +3936,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_async tags: - test-standard @@ -3983,7 +3983,7 @@ tasks: TOPOLOGY: standalone VERSION: "5.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_async tags: - test-standard @@ -4005,7 +4005,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "5.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_async tags: - test-standard @@ -4028,7 +4028,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "5.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_async tags: - test-standard @@ -4053,7 +4053,7 @@ tasks: TOPOLOGY: replica_set VERSION: "6.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_sync tags: - test-standard @@ -4075,7 +4075,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "6.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_sync tags: - test-standard @@ -4098,7 +4098,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "6.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_sync tags: - test-standard @@ -4121,7 +4121,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_sync tags: - test-standard @@ -4143,7 +4143,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_sync tags: - test-standard @@ -4165,7 +4165,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_sync tags: - test-standard @@ -4211,7 +4211,7 @@ tasks: TOPOLOGY: replica_set VERSION: "7.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_async tags: - test-standard @@ -4233,7 +4233,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "7.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_async tags: - test-standard @@ -4256,7 +4256,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "7.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_async tags: - test-standard @@ -4279,7 +4279,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "7.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_async tags: - test-standard @@ -4301,7 +4301,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "7.0" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_async tags: - test-standard @@ -4323,7 +4323,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_async tags: - test-standard @@ -4367,7 +4367,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_sync tags: - test-standard @@ -4413,7 +4413,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: "8.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_sync tags: - test-standard @@ -4435,7 +4435,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_sync tags: - test-standard @@ -4458,7 +4458,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_sync tags: - test-standard @@ -4481,7 +4481,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_sync tags: - test-standard @@ -4526,7 +4526,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "9.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_async tags: - test-standard @@ -4572,7 +4572,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: "9.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" TEST_NAME: default_async tags: - test-standard @@ -4594,7 +4594,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t TEST_NAME: default_async tags: - test-standard @@ -4617,7 +4617,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 TEST_NAME: default_async tags: - test-standard @@ -4640,7 +4640,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_async tags: - test-standard @@ -4687,7 +4687,7 @@ tasks: TOPOLOGY: replica_set VERSION: latest COVERAGE: "1" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_async tags: - test-standard @@ -4738,7 +4738,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_async tags: - test-standard @@ -4788,7 +4788,7 @@ tasks: TOPOLOGY: standalone VERSION: latest COVERAGE: "1" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_async tags: - test-standard @@ -4813,7 +4813,7 @@ tasks: TOPOLOGY: standalone VERSION: latest COVERAGE: "1" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_async tags: - test-standard @@ -4836,7 +4836,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" TEST_NAME: default_sync tags: - test-standard @@ -4881,7 +4881,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" TEST_NAME: default_sync tags: - test-standard @@ -4925,7 +4925,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: rapid - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" TEST_NAME: default_sync tags: - test-standard @@ -4947,7 +4947,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: rapid - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" TEST_NAME: default_sync tags: - test-standard @@ -4994,7 +4994,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "4.4" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" tags: - test-non-standard - server-4.4 @@ -5015,7 +5015,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" tags: - test-non-standard - server-4.4 @@ -5038,7 +5038,7 @@ tasks: TOPOLOGY: standalone VERSION: "4.4" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: - test-non-standard - server-4.4 @@ -5059,7 +5059,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "4.4" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-4.4 @@ -5081,7 +5081,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "5.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t tags: - test-non-standard - server-5.0 @@ -5103,7 +5103,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "5.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-5.0 @@ -5125,7 +5125,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: - test-non-standard - server-5.0 @@ -5146,7 +5146,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "5.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" tags: - test-non-standard - server-5.0 @@ -5190,7 +5190,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: "6.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: - test-non-standard - server-6.0 @@ -5211,7 +5211,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-6.0 @@ -5255,7 +5255,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "7.0" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" tags: - test-non-standard - server-7.0 @@ -5276,7 +5276,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "7.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" tags: - test-non-standard - server-7.0 @@ -5297,7 +5297,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" tags: - test-non-standard - server-7.0 @@ -5318,7 +5318,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-7.0 @@ -5340,7 +5340,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: - test-non-standard - server-8.0 @@ -5361,7 +5361,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-8.0 @@ -5405,7 +5405,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t tags: - test-non-standard - server-8.0 @@ -5429,7 +5429,7 @@ tasks: TOPOLOGY: replica_set VERSION: "9.0" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: - test-non-standard - server-9.0 @@ -5450,7 +5450,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" tags: - test-non-standard - server-9.0 @@ -5471,7 +5471,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-9.0 @@ -5536,7 +5536,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: latest - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-latest @@ -5605,7 +5605,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: latest - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: - test-non-standard - server-latest @@ -5626,7 +5626,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" tags: - test-non-standard - server-rapid @@ -5647,7 +5647,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t tags: - test-non-standard - server-rapid @@ -5669,7 +5669,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: rapid - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" tags: - test-non-standard - server-rapid @@ -5690,7 +5690,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: rapid - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-non-standard - server-rapid @@ -5704,7 +5704,7 @@ tasks: commands: - func: test numpy vars: - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: - binary - vector @@ -5740,7 +5740,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: "4.4" TEST_MIN_DEPS: "1" - TOOLCHAIN_VERSION: "3.10" + UV_PYTHON: "3.10" tags: - test-standard-auth - server-4.4 @@ -5761,7 +5761,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-4.4 @@ -5783,7 +5783,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - TOOLCHAIN_VERSION: "3.11" + UV_PYTHON: "3.11" tags: - test-standard-auth - server-5.0 @@ -5804,7 +5804,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-5.0 @@ -5826,7 +5826,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" - TOOLCHAIN_VERSION: "3.12" + UV_PYTHON: "3.12" tags: - test-standard-auth - server-6.0 @@ -5847,7 +5847,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "6.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-6.0 @@ -5869,7 +5869,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "7.0" - TOOLCHAIN_VERSION: "3.13" + UV_PYTHON: "3.13" tags: - test-standard-auth - server-7.0 @@ -5890,7 +5890,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "7.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-7.0 @@ -5912,7 +5912,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - TOOLCHAIN_VERSION: 3.14t + UV_PYTHON: 3.14t tags: - test-standard-auth - server-8.0 @@ -5934,7 +5934,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-8.0 @@ -5956,7 +5956,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: "3.14" + UV_PYTHON: "3.14" tags: - test-standard-auth - server-9.0 @@ -5977,7 +5977,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "9.0" - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-9.0 @@ -6023,7 +6023,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: latest - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-latest @@ -6067,7 +6067,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - TOOLCHAIN_VERSION: pypy3.11 + UV_PYTHON: pypy3.11 tags: - test-standard-auth - server-rapid diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 631aaedccb..20878e6acc 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -1040,7 +1040,8 @@ def create_aws_lambda_tasks(): def create_search_index_tasks(): assume_func = FunctionCall(func="assume ec2 role") server_func = FunctionCall(func="run server", vars=dict(TEST_NAME="search_index")) - vars = dict(TEST_NAME="search_index", TOOLCHAIN_VERSION=CPYTHONS[0]) + vars = dict(TEST_NAME="search_index") + set_version_var(vars, CPYTHONS[0]) test_func = FunctionCall(func="run tests", vars=vars) task_name = "test-search-index-helpers" tags = ["search_index"] @@ -1272,7 +1273,6 @@ def create_run_server_func(): "SSL", "ORCHESTRATION_FILE", "UV_PYTHON", - "TOOLCHAIN_VERSION", "STORAGE_ENGINE", "REQUIRE_API_VERSION", "DRIVERS_TOOLS", @@ -1299,7 +1299,6 @@ def create_run_tests_func(): "UV_PYTHON", "LIBMONGOCRYPT_URL", "MONGODB_URI", - "TOOLCHAIN_VERSION", "DISABLE_TEST_COMMANDS", "GREEN_FRAMEWORK", "NO_EXT", @@ -1322,7 +1321,7 @@ def create_run_tests_func(): def create_test_numpy_func(): - includes = ["TOOLCHAIN_VERSION", "UV_PYTHON", "COVERAGE"] + includes = ["UV_PYTHON", "COVERAGE"] test_cmd = get_subprocess_exec( include_expansions_in_env=includes, args=[".evergreen/just.sh", "test-numpy"] ) diff --git a/.evergreen/scripts/generate_config_utils.py b/.evergreen/scripts/generate_config_utils.py index 138602564c..341dcabcd3 100644 --- a/.evergreen/scripts/generate_config_utils.py +++ b/.evergreen/scripts/generate_config_utils.py @@ -27,8 +27,8 @@ MIN_SUPPORT_VERSIONS = ["3.9", "pypy3.9", "pypy3.10"] ALL_PYTHONS = CPYTHONS + PYPYS MIN_MAX_PYTHON = [CPYTHONS[0], CPYTHONS[-1]] -# Python versions not yet provisioned in the Evergreen toolchain, mapped to -# the exact version uv must be requested to install (uv only installs a +# Python versions that are not provisioned in the Evergreen toolchain, mapped +# to the exact version uv must be requested to install (uv only installs a # pre-release when asked for its full version). Drop an entry once the # toolchain provides the version. UV_PYTHON_VERSIONS = { @@ -39,10 +39,7 @@ def set_version_var(env: dict[str, str], version: str) -> None: """Set the env var on task vars that selects the given Python version.""" - if version in UV_PYTHON_VERSIONS: - env["UV_PYTHON"] = UV_PYTHON_VERSIONS[version] - else: - env["TOOLCHAIN_VERSION"] = version + env["UV_PYTHON"] = UV_PYTHON_VERSIONS.get(version, version) BATCHTIME_WEEK = 10080 diff --git a/.evergreen/scripts/setup-uv-python.sh b/.evergreen/scripts/setup-uv-python.sh index e83abce4b9..8ad8c461aa 100755 --- a/.evergreen/scripts/setup-uv-python.sh +++ b/.evergreen/scripts/setup-uv-python.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Set up the UV_PYTHON variable. +# Set up the UV_PYTHON variable and put the toolchain pythons on the path. set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) @@ -18,43 +18,56 @@ if [ -f $HERE/test-env.sh ]; then . $HERE/test-env.sh fi +# Always use UV_PYTHON to select the Python version. if [ -z "${UV_PYTHON:-}" ]; then - set -x - # Translate a TOOLCHAIN_VERSION to UV_PYTHON. - if [ -n "${TOOLCHAIN_VERSION:-}" ]; then - _python=$TOOLCHAIN_VERSION - if [ "$(uname -s)" = "Darwin" ]; then - if [[ "$_python" == *"t"* ]]; then - binary_name="python3t" - framework_dir="PythonT" - else - binary_name="python3" - framework_dir="Python" - fi - _python=$(echo "$_python" | sed 's/t//g') - _python="/Library/Frameworks/$framework_dir.Framework/Versions/$_python/bin/$binary_name" - elif [ "Windows_NT" = "${OS:-}" ]; then - _python=$(echo $_python | cut -d. -f1,2 | sed 's/\.//g; s/t//g') - if [[ "$TOOLCHAIN_VERSION" == *"t"* ]]; then - _exe="python${TOOLCHAIN_VERSION}.exe" + export UV_PYTHON="$_python" +fi + +# Prefer a toolchain (system) python over a uv-managed download: resolve a +# bare version like 3.10 or 3.14t to the toolchain interpreter when one is +# installed, and put its directory on the path. Anything else (a path, or a +# version uv must install itself, such as a pre-release) is left alone. +if [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then + case "$(uname -s)" in + Darwin) + if [[ "$UV_PYTHON" == *"t"* ]]; then + binary_name="python3t" + framework_dir="PythonT" + else + binary_name="python3" + framework_dir="Python" + fi + _version="${UV_PYTHON%t}" + _bin_dir="/Library/Frameworks/${framework_dir}.Framework/Versions/$_version/bin" + if [ -x "$_bin_dir/$binary_name" ]; then + export UV_PYTHON="$_bin_dir/$binary_name" + export PATH="$_bin_dir:$PATH" + fi + ;; + *) + if [ "Windows_NT" = "${OS:-}" ]; then + _dir=$(echo "$UV_PYTHON" | cut -d. -f1,2 | sed 's/\.//g; s/t//g') + if [[ "$UV_PYTHON" == *"t"* ]]; then + _exe="python${UV_PYTHON}.exe" else _exe="python.exe" fi if [ -n "${IS_WIN32:-}" ]; then - _win_python="C:/python/32/Python${_python}/${_exe}" + _bin_dir="C:/python/32/Python${_dir}" else - _win_python="C:/python/Python${_python}/${_exe}" + _bin_dir="C:/python/Python${_dir}" fi - # Fall back to the version string if the toolchain path doesn't exist. - # uv will then download and manage Python itself. - if [ -f "$_win_python" ]; then - _python="$_win_python" - else - _python="$TOOLCHAIN_VERSION" + if [ -f "$_bin_dir/$_exe" ]; then + export UV_PYTHON="$_bin_dir/$_exe" + export PATH="$_bin_dir:$PATH" fi - elif [ -d "/opt/python/$_python/bin" ]; then - _python="/opt/python/$_python/bin/python3" - fi - fi - export UV_PYTHON="$_python" + else + _bin_dir="/opt/python/$UV_PYTHON/bin" + if [ -x "$_bin_dir/python3" ]; then + export UV_PYTHON="$_bin_dir/python3" + export PATH="$_bin_dir:$PATH" + fi + fi + ;; + esac fi From 78b8a2ec30337bb4d5ad53a65e9c00a33bd6a49d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 4 Sep 2026 19:16:44 -0500 Subject: [PATCH 03/27] PYTHON-6077 Drop the python-build-standalone fallback for 3.15 --- .evergreen/generated_configs/tasks.yml | 174 ++++++++++---------- .evergreen/scripts/fetch-python.sh | 44 ----- .evergreen/scripts/generate_config_utils.py | 10 +- .evergreen/scripts/setup-dev-env.sh | 16 +- 4 files changed, 92 insertions(+), 152 deletions(-) delete mode 100755 .evergreen/scripts/fetch-python.sh diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 455da31474..15f90775de 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -102,7 +102,7 @@ tasks: AWS_ROLE_SESSION_NAME: test UV_PYTHON: "3.14" tags: [auth-aws, auth-aws-web-identity] - - name: test-auth-aws-rapid-regular-python3.15.0rc2t + - name: test-auth-aws-rapid-regular-python3.15t commands: - func: run server vars: @@ -113,9 +113,9 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: regular - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: [auth-aws, auth-aws-regular, free-threaded] - - name: test-auth-aws-latest-assume-role-python3.15.0rc2-cov + - name: test-auth-aws-latest-assume-role-python3.15-cov commands: - func: run server vars: @@ -126,7 +126,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: assume-role - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" COVERAGE: "1" tags: [auth-aws, auth-aws-assume-role, pr] - name: test-auth-aws-ecs @@ -382,12 +382,12 @@ tasks: - func: run server vars: TOPOLOGY: replica_set - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: embedded - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [mod_wsgi, pr] # No orchestration tests @@ -399,12 +399,12 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [test-no-orchestration, python-3.10] - - name: test-no-orchestration-python3.15.0rc2 + - name: test-no-orchestration-python3.15 commands: - func: assume ec2 role - func: run tests vars: - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [test-no-orchestration, python-3.15] - name: test-no-orchestration-pypy3.11 commands: @@ -536,7 +536,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -544,7 +544,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -623,7 +623,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -631,7 +631,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -710,7 +710,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -718,7 +718,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -797,7 +797,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -805,7 +805,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -884,7 +884,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-soft-fail-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-soft-fail-latest-python3.15 commands: - func: run tests vars: @@ -892,7 +892,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -1000,7 +1000,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15.0rc2-cov + - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15-cov commands: - func: run tests vars: @@ -1008,7 +1008,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" COVERAGE: "1" tags: - ocsp @@ -1121,7 +1121,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -1129,7 +1129,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-ecdsa @@ -1240,7 +1240,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -1248,7 +1248,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-ecdsa @@ -1359,7 +1359,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -1367,7 +1367,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-ecdsa @@ -1450,7 +1450,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1458,7 +1458,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1537,7 +1537,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1545,7 +1545,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1624,7 +1624,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1632,7 +1632,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1711,7 +1711,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1719,7 +1719,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1798,7 +1798,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1806,7 +1806,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1885,7 +1885,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1893,7 +1893,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1972,7 +1972,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1980,7 +1980,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -2059,7 +2059,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-soft-fail-latest-python3.15.0rc2 + - name: test-ocsp-rsa-soft-fail-latest-python3.15 commands: - func: run tests vars: @@ -2067,7 +2067,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -2174,7 +2174,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2182,7 +2182,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2293,7 +2293,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2301,7 +2301,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2412,7 +2412,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2420,7 +2420,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2531,7 +2531,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2539,7 +2539,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2622,7 +2622,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -2630,7 +2630,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2709,7 +2709,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -2717,7 +2717,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2796,7 +2796,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -2804,7 +2804,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] # Oidc tests @@ -3011,7 +3011,7 @@ tasks: SSL: nossl TOPOLOGY: replica_set COVERAGE: "1" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - server-version @@ -3253,7 +3253,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - server-version @@ -3272,7 +3272,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - server-version @@ -3431,7 +3431,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - server-version @@ -3450,7 +3450,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - server-version @@ -3646,7 +3646,7 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - server-version @@ -3668,7 +3668,7 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - server-version @@ -3798,7 +3798,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - test-standard @@ -3957,7 +3957,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - test-standard @@ -4186,7 +4186,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - test-standard @@ -4344,7 +4344,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - test-standard @@ -4388,7 +4388,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - test-standard @@ -4502,7 +4502,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - test-standard @@ -4547,7 +4547,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "9.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - test-standard @@ -4661,7 +4661,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - test-standard @@ -4711,7 +4711,7 @@ tasks: TOPOLOGY: replica_set VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - test-standard @@ -4762,7 +4762,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - test-standard @@ -4857,7 +4857,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - test-standard @@ -4902,7 +4902,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - test-standard @@ -4970,7 +4970,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.2" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-string-query-preview - server-8.2 @@ -5166,7 +5166,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "6.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard - server-6.0 @@ -5232,7 +5232,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-non-standard - server-6.0 @@ -5382,7 +5382,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-non-standard - server-8.0 @@ -5492,7 +5492,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard - server-9.0 @@ -5513,7 +5513,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: latest - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-non-standard - server-latest @@ -5559,7 +5559,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard - server-latest @@ -5582,7 +5582,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard-no-cov - server-latest @@ -5709,11 +5709,11 @@ tasks: - vector - python-3.10 - test-numpy - - name: test-numpy-python3.15-python3.15.0rc2-cov + - name: test-numpy-python3.15-python3.15-cov commands: - func: test numpy vars: - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" COVERAGE: "1" tags: - binary @@ -6000,7 +6000,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-standard-auth - server-latest @@ -6044,7 +6044,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-standard-auth - server-rapid diff --git a/.evergreen/scripts/fetch-python.sh b/.evergreen/scripts/fetch-python.sh deleted file mode 100755 index 494d251848..0000000000 --- a/.evergreen/scripts/fetch-python.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# Download a Python build from python-build-standalone and print the directory -# uv should use for it. Temporary: uv does not yet index Python 3.15 -# pre-releases, so we fetch the build ourselves until the version is available -# in the Evergreen toolchain. See PYTHON-6077. -set -eu - -version="${UV_PYTHON:?UV_PYTHON must be set}" -# python-build-standalone release tag that carries the builds below. -pbs_tag="20260901" - -case "$version" in - 3.15.0rc2t) interpreter="3.15.0rc2"; variant="-freethreaded" ;; - 3.15.0rc2) interpreter="3.15.0rc2"; variant="" ;; - *) echo "No python-build-standalone build configured for Python $version" >&2; exit 1 ;; -esac - -case "$(uname -s)" in - Darwin) target_os="-apple-darwin"; base_dir="${HOME}" ;; - Linux) target_os="-unknown-linux-gnu"; base_dir="${HOME}" ;; - MSYS* | MINGW* | CYGWIN*) target_os="-pc-windows-msvc"; base_dir="${USERPROFILE:-$HOME}" ;; - *) echo "Unsupported platform $(uname -s)" >&2; exit 1 ;; -esac - -case "$(uname -m)" in - arm64 | aarch64) target_arch="aarch64" ;; - x86_64) target_arch="x86_64" ;; - *) echo "Unsupported architecture $(uname -m)" >&2; exit 1 ;; -esac - -asset="cpython-${interpreter}+${pbs_tag}-${target_arch}${target_os}${variant}-install_only.tar.gz" -url="https://github.com/astral-sh/python-build-standalone/releases/download/${pbs_tag}/${asset//+/%2B}" - -# Use a native path on Windows: bash reports MSYS paths (e.g. /home/user) -# that the native Windows uv binary cannot resolve. Normalize backslashes -# to forward slashes, which both uv and the shell's tar accept. -dest="${base_dir}/.cache/python-build-standalone/${version}/${target_arch}${target_os}" -dest="$(printf '%s' "$dest" | tr '\\' '/')" -if [ ! -d "$dest/python" ]; then - mkdir -p "$dest" - echo "Downloading Python ${version} from python-build-standalone" >&2 - curl -fL --retry 3 "$url" | tar -xz -C "$dest" -fi -echo "$dest/python" diff --git a/.evergreen/scripts/generate_config_utils.py b/.evergreen/scripts/generate_config_utils.py index 341dcabcd3..fac479e60f 100644 --- a/.evergreen/scripts/generate_config_utils.py +++ b/.evergreen/scripts/generate_config_utils.py @@ -27,19 +27,11 @@ MIN_SUPPORT_VERSIONS = ["3.9", "pypy3.9", "pypy3.10"] ALL_PYTHONS = CPYTHONS + PYPYS MIN_MAX_PYTHON = [CPYTHONS[0], CPYTHONS[-1]] -# Python versions that are not provisioned in the Evergreen toolchain, mapped -# to the exact version uv must be requested to install (uv only installs a -# pre-release when asked for its full version). Drop an entry once the -# toolchain provides the version. -UV_PYTHON_VERSIONS = { - "3.15": "3.15.0rc2", - "3.15t": "3.15.0rc2t", -} def set_version_var(env: dict[str, str], version: str) -> None: """Set the env var on task vars that selects the given Python version.""" - env["UV_PYTHON"] = UV_PYTHON_VERSIONS.get(version, version) + env["UV_PYTHON"] = version BATCHTIME_WEEK = 10080 diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index fbfcf999a2..30d6f006b0 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -19,19 +19,11 @@ fi # Handle the value for UV_PYTHON. . $HERE/setup-uv-python.sh -# Ensure a bare-version interpreter is available before it is used. uv -# downloads a managed Python only on explicit request and never offers Python -# pre-releases, so try `uv python install` first and fall back to fetching the -# build ourselves. The fallback is temporary until these versions are in the -# Evergreen toolchain. +# Ensure the requested interpreter is available before it is used. uv only +# installs a managed Python on explicit request, so install one when +# UV_PYTHON names a version rather than a path. if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then - if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then - _interpreter="$(bash $HERE/fetch-python.sh)" || { - echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 - exit 1 - } - export UV_PYTHON="$_interpreter" - fi + uv python install "$UV_PYTHON" fi # Ensure dependencies are installed. From 620507f754eebd723272cf5af9123a4d4a4c0389 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 4 Sep 2026 19:49:26 -0500 Subject: [PATCH 04/27] Revert "PYTHON-6077 Drop the python-build-standalone fallback for 3.15" This reverts commit 78b8a2ec30337bb4d5ad53a65e9c00a33bd6a49d. --- .evergreen/generated_configs/tasks.yml | 174 ++++++++++---------- .evergreen/scripts/fetch-python.sh | 44 +++++ .evergreen/scripts/generate_config_utils.py | 10 +- .evergreen/scripts/setup-dev-env.sh | 16 +- 4 files changed, 152 insertions(+), 92 deletions(-) create mode 100755 .evergreen/scripts/fetch-python.sh diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 15f90775de..455da31474 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -102,7 +102,7 @@ tasks: AWS_ROLE_SESSION_NAME: test UV_PYTHON: "3.14" tags: [auth-aws, auth-aws-web-identity] - - name: test-auth-aws-rapid-regular-python3.15t + - name: test-auth-aws-rapid-regular-python3.15.0rc2t commands: - func: run server vars: @@ -113,9 +113,9 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: regular - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t tags: [auth-aws, auth-aws-regular, free-threaded] - - name: test-auth-aws-latest-assume-role-python3.15-cov + - name: test-auth-aws-latest-assume-role-python3.15.0rc2-cov commands: - func: run server vars: @@ -126,7 +126,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: assume-role - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 COVERAGE: "1" tags: [auth-aws, auth-aws-assume-role, pr] - name: test-auth-aws-ecs @@ -382,12 +382,12 @@ tasks: - func: run server vars: TOPOLOGY: replica_set - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 - func: run tests vars: TEST_NAME: mod_wsgi SUB_TEST_NAME: embedded - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [mod_wsgi, pr] # No orchestration tests @@ -399,12 +399,12 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [test-no-orchestration, python-3.10] - - name: test-no-orchestration-python3.15 + - name: test-no-orchestration-python3.15.0rc2 commands: - func: assume ec2 role - func: run tests vars: - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [test-no-orchestration, python-3.15] - name: test-no-orchestration-pypy3.11 commands: @@ -536,7 +536,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -544,7 +544,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -623,7 +623,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -631,7 +631,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -710,7 +710,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -718,7 +718,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -797,7 +797,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -805,7 +805,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -884,7 +884,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-soft-fail-latest-python3.15 + - name: test-ocsp-ecdsa-soft-fail-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -892,7 +892,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -1000,7 +1000,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15-cov + - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15.0rc2-cov commands: - func: run tests vars: @@ -1008,7 +1008,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 COVERAGE: "1" tags: - ocsp @@ -1121,7 +1121,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15 + - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1129,7 +1129,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-ecdsa @@ -1240,7 +1240,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1248,7 +1248,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-ecdsa @@ -1359,7 +1359,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1367,7 +1367,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-ecdsa @@ -1450,7 +1450,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1458,7 +1458,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1537,7 +1537,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1545,7 +1545,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1624,7 +1624,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15 + - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1632,7 +1632,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1711,7 +1711,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1719,7 +1719,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1798,7 +1798,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1806,7 +1806,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1885,7 +1885,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1893,7 +1893,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1972,7 +1972,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -1980,7 +1980,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -2059,7 +2059,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-soft-fail-latest-python3.15 + - name: test-ocsp-rsa-soft-fail-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2067,7 +2067,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -2174,7 +2174,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15 + - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2182,7 +2182,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2293,7 +2293,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15 + - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2301,7 +2301,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2412,7 +2412,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15 + - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2420,7 +2420,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2531,7 +2531,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15 + - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2539,7 +2539,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - ocsp - ocsp-rsa @@ -2622,7 +2622,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2630,7 +2630,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2709,7 +2709,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2717,7 +2717,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2796,7 +2796,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15 + - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 commands: - func: run tests vars: @@ -2804,7 +2804,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: [ocsp, ocsp-rsa, latest] # Oidc tests @@ -3011,7 +3011,7 @@ tasks: SSL: nossl TOPOLOGY: replica_set COVERAGE: "1" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - server-version @@ -3253,7 +3253,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_async tags: - server-version @@ -3272,7 +3272,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - server-version @@ -3431,7 +3431,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_sync tags: - server-version @@ -3450,7 +3450,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - server-version @@ -3646,7 +3646,7 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_async tags: - server-version @@ -3668,7 +3668,7 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - server-version @@ -3798,7 +3798,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - test-standard @@ -3957,7 +3957,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - test-standard @@ -4186,7 +4186,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_sync tags: - test-standard @@ -4344,7 +4344,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_async tags: - test-standard @@ -4388,7 +4388,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_sync tags: - test-standard @@ -4502,7 +4502,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - test-standard @@ -4547,7 +4547,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "9.0" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_async tags: - test-standard @@ -4661,7 +4661,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - test-standard @@ -4711,7 +4711,7 @@ tasks: TOPOLOGY: replica_set VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_async tags: - test-standard @@ -4762,7 +4762,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_async tags: - test-standard @@ -4857,7 +4857,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t TEST_NAME: default_sync tags: - test-standard @@ -4902,7 +4902,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 TEST_NAME: default_sync tags: - test-standard @@ -4970,7 +4970,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.2" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - test-string-query-preview - server-8.2 @@ -5166,7 +5166,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "6.0" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard - server-6.0 @@ -5232,7 +5232,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t tags: - test-non-standard - server-6.0 @@ -5382,7 +5382,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t tags: - test-non-standard - server-8.0 @@ -5492,7 +5492,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard - server-9.0 @@ -5513,7 +5513,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: latest - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t tags: - test-non-standard - server-latest @@ -5559,7 +5559,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard - server-latest @@ -5582,7 +5582,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: latest - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - test-non-standard-no-cov - server-latest @@ -5709,11 +5709,11 @@ tasks: - vector - python-3.10 - test-numpy - - name: test-numpy-python3.15-python3.15-cov + - name: test-numpy-python3.15-python3.15.0rc2-cov commands: - func: test numpy vars: - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 COVERAGE: "1" tags: - binary @@ -6000,7 +6000,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: "3.15" + UV_PYTHON: 3.15.0rc2 tags: - test-standard-auth - server-latest @@ -6044,7 +6044,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - UV_PYTHON: 3.15t + UV_PYTHON: 3.15.0rc2t tags: - test-standard-auth - server-rapid diff --git a/.evergreen/scripts/fetch-python.sh b/.evergreen/scripts/fetch-python.sh new file mode 100755 index 0000000000..494d251848 --- /dev/null +++ b/.evergreen/scripts/fetch-python.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Download a Python build from python-build-standalone and print the directory +# uv should use for it. Temporary: uv does not yet index Python 3.15 +# pre-releases, so we fetch the build ourselves until the version is available +# in the Evergreen toolchain. See PYTHON-6077. +set -eu + +version="${UV_PYTHON:?UV_PYTHON must be set}" +# python-build-standalone release tag that carries the builds below. +pbs_tag="20260901" + +case "$version" in + 3.15.0rc2t) interpreter="3.15.0rc2"; variant="-freethreaded" ;; + 3.15.0rc2) interpreter="3.15.0rc2"; variant="" ;; + *) echo "No python-build-standalone build configured for Python $version" >&2; exit 1 ;; +esac + +case "$(uname -s)" in + Darwin) target_os="-apple-darwin"; base_dir="${HOME}" ;; + Linux) target_os="-unknown-linux-gnu"; base_dir="${HOME}" ;; + MSYS* | MINGW* | CYGWIN*) target_os="-pc-windows-msvc"; base_dir="${USERPROFILE:-$HOME}" ;; + *) echo "Unsupported platform $(uname -s)" >&2; exit 1 ;; +esac + +case "$(uname -m)" in + arm64 | aarch64) target_arch="aarch64" ;; + x86_64) target_arch="x86_64" ;; + *) echo "Unsupported architecture $(uname -m)" >&2; exit 1 ;; +esac + +asset="cpython-${interpreter}+${pbs_tag}-${target_arch}${target_os}${variant}-install_only.tar.gz" +url="https://github.com/astral-sh/python-build-standalone/releases/download/${pbs_tag}/${asset//+/%2B}" + +# Use a native path on Windows: bash reports MSYS paths (e.g. /home/user) +# that the native Windows uv binary cannot resolve. Normalize backslashes +# to forward slashes, which both uv and the shell's tar accept. +dest="${base_dir}/.cache/python-build-standalone/${version}/${target_arch}${target_os}" +dest="$(printf '%s' "$dest" | tr '\\' '/')" +if [ ! -d "$dest/python" ]; then + mkdir -p "$dest" + echo "Downloading Python ${version} from python-build-standalone" >&2 + curl -fL --retry 3 "$url" | tar -xz -C "$dest" +fi +echo "$dest/python" diff --git a/.evergreen/scripts/generate_config_utils.py b/.evergreen/scripts/generate_config_utils.py index fac479e60f..341dcabcd3 100644 --- a/.evergreen/scripts/generate_config_utils.py +++ b/.evergreen/scripts/generate_config_utils.py @@ -27,11 +27,19 @@ MIN_SUPPORT_VERSIONS = ["3.9", "pypy3.9", "pypy3.10"] ALL_PYTHONS = CPYTHONS + PYPYS MIN_MAX_PYTHON = [CPYTHONS[0], CPYTHONS[-1]] +# Python versions that are not provisioned in the Evergreen toolchain, mapped +# to the exact version uv must be requested to install (uv only installs a +# pre-release when asked for its full version). Drop an entry once the +# toolchain provides the version. +UV_PYTHON_VERSIONS = { + "3.15": "3.15.0rc2", + "3.15t": "3.15.0rc2t", +} def set_version_var(env: dict[str, str], version: str) -> None: """Set the env var on task vars that selects the given Python version.""" - env["UV_PYTHON"] = version + env["UV_PYTHON"] = UV_PYTHON_VERSIONS.get(version, version) BATCHTIME_WEEK = 10080 diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 30d6f006b0..fbfcf999a2 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -19,11 +19,19 @@ fi # Handle the value for UV_PYTHON. . $HERE/setup-uv-python.sh -# Ensure the requested interpreter is available before it is used. uv only -# installs a managed Python on explicit request, so install one when -# UV_PYTHON names a version rather than a path. +# Ensure a bare-version interpreter is available before it is used. uv +# downloads a managed Python only on explicit request and never offers Python +# pre-releases, so try `uv python install` first and fall back to fetching the +# build ourselves. The fallback is temporary until these versions are in the +# Evergreen toolchain. if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then - uv python install "$UV_PYTHON" + if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then + _interpreter="$(bash $HERE/fetch-python.sh)" || { + echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 + exit 1 + } + export UV_PYTHON="$_interpreter" + fi fi # Ensure dependencies are installed. From f6be3d07d2c5cfbea8ea16b2a3d0301a9b484ac6 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 4 Sep 2026 20:15:25 -0500 Subject: [PATCH 05/27] PYTHON-6077 Handle remaining 3.15 CI failures --- .evergreen/generated_configs/tasks.yml | 12 ------------ .evergreen/scripts/generate_config.py | 6 +++++- .evergreen/scripts/setup-dev-env.sh | 12 ++++++------ .evergreen/scripts/setup_tests.py | 3 ++- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 455da31474..bc4fa283af 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -377,18 +377,6 @@ tasks: SUB_TEST_NAME: embedded UV_PYTHON: "3.14" tags: [mod_wsgi, pr] - - name: mod-wsgi-embedded-mode-replica-set-python3.15 - commands: - - func: run server - vars: - TOPOLOGY: replica_set - UV_PYTHON: 3.15.0rc2 - - func: run tests - vars: - TEST_NAME: mod_wsgi - SUB_TEST_NAME: embedded - UV_PYTHON: 3.15.0rc2 - tags: [mod_wsgi, pr] # No orchestration tests - name: test-no-orchestration-python3.10-min-deps diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index d0c396763c..248567c7e9 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -18,6 +18,7 @@ PYPYS, SYNCS, TOPOLOGIES, + UV_PYTHON_VERSIONS, create_variant, get_assume_role, get_s3_put, @@ -968,7 +969,10 @@ def create_mod_wsgi_tasks(): for (test, topology), python in zip_cycle( product(["standalone", "embedded-mode"], ["standalone", "replica_set"]), CPYTHONS ): - if "t" in python: + # Skip free-threaded builds and versions not yet in the toolchain: + # mod_wsgi must be compiled against the toolchain python, and no + # mod_wsgi module exists for a version the toolchain lacks. + if "t" in python or python in UV_PYTHON_VERSIONS: continue if test == "standalone": task_name = "mod-wsgi-" diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index fbfcf999a2..293cbcb32d 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -19,12 +19,12 @@ fi # Handle the value for UV_PYTHON. . $HERE/setup-uv-python.sh -# Ensure a bare-version interpreter is available before it is used. uv -# downloads a managed Python only on explicit request and never offers Python -# pre-releases, so try `uv python install` first and fall back to fetching the -# build ourselves. The fallback is temporary until these versions are in the -# Evergreen toolchain. -if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then +# Python 3.15 pre-releases are not yet in the Evergreen toolchain or uv's +# download index, so install them explicitly and fall back to fetching a +# python-build-standalone build when uv cannot provide one. The fallback is +# temporary until these versions reach the toolchain. Other versions resolve +# through the toolchain or uv on their own. +if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]] && [[ "$UV_PYTHON" == 3.15* ]]; then if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then _interpreter="$(bash $HERE/fetch-python.sh)" || { echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 diff --git a/.evergreen/scripts/setup_tests.py b/.evergreen/scripts/setup_tests.py index 5199fe3959..93db297cfd 100644 --- a/.evergreen/scripts/setup_tests.py +++ b/.evergreen/scripts/setup_tests.py @@ -290,7 +290,8 @@ def handle_test_env() -> None: krb_conf.touch() write_env("KRB5_CONFIG", krb_conf) LOGGER.info("Writing keytab") - keytab = base64.b64decode(config["KEYTAB_BASE64"]) + keytab_b64 = config["KEYTAB_BASE64"] + keytab = base64.b64decode(keytab_b64 + "=" * (-len(keytab_b64) % 4)) keytab_file = ROOT / ".evergreen/drivers.keytab" with keytab_file.open("wb") as fid: fid.write(keytab) From 484107796ff8729a88e3548834389ede2ed5cf86 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 07:54:04 -0500 Subject: [PATCH 06/27] PYTHON-6077 Generalize python-build-standalone fetch for any missing version --- .evergreen/generated_configs/tasks.yml | 170 ++++++++++---------- .evergreen/scripts/fetch-python.sh | 48 ++++-- .evergreen/scripts/generate_config.py | 4 +- .evergreen/scripts/generate_config_utils.py | 15 +- .evergreen/scripts/setup-dev-env.sh | 29 ++-- 5 files changed, 138 insertions(+), 128 deletions(-) diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index bc4fa283af..c1284e88c9 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -102,7 +102,7 @@ tasks: AWS_ROLE_SESSION_NAME: test UV_PYTHON: "3.14" tags: [auth-aws, auth-aws-web-identity] - - name: test-auth-aws-rapid-regular-python3.15.0rc2t + - name: test-auth-aws-rapid-regular-python3.15t commands: - func: run server vars: @@ -113,9 +113,9 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: regular - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: [auth-aws, auth-aws-regular, free-threaded] - - name: test-auth-aws-latest-assume-role-python3.15.0rc2-cov + - name: test-auth-aws-latest-assume-role-python3.15-cov commands: - func: run server vars: @@ -126,7 +126,7 @@ tasks: vars: TEST_NAME: auth_aws SUB_TEST_NAME: assume-role - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" COVERAGE: "1" tags: [auth-aws, auth-aws-assume-role, pr] - name: test-auth-aws-ecs @@ -387,12 +387,12 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [test-no-orchestration, python-3.10] - - name: test-no-orchestration-python3.15.0rc2 + - name: test-no-orchestration-python3.15 commands: - func: assume ec2 role - func: run tests vars: - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [test-no-orchestration, python-3.15] - name: test-no-orchestration-pypy3.11 commands: @@ -524,7 +524,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -532,7 +532,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -611,7 +611,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -619,7 +619,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -698,7 +698,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -706,7 +706,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -785,7 +785,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -793,7 +793,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -872,7 +872,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-soft-fail-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-soft-fail-latest-python3.15 commands: - func: run tests vars: @@ -880,7 +880,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -988,7 +988,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15.0rc2-cov + - name: test-ocsp-ecdsa-valid-cert-server-staples-latest-python3.15-cov commands: - func: run tests vars: @@ -996,7 +996,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" COVERAGE: "1" tags: - ocsp @@ -1109,7 +1109,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -1117,7 +1117,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-ecdsa @@ -1228,7 +1228,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-valid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -1236,7 +1236,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-ecdsa @@ -1347,7 +1347,7 @@ tasks: - ocsp-ecdsa - rapid - ocsp-staple - - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -1355,7 +1355,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-ecdsa @@ -1438,7 +1438,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1446,7 +1446,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1525,7 +1525,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1533,7 +1533,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1612,7 +1612,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-ecdsa, rapid] - - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-ecdsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1620,7 +1620,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-ecdsa, latest] - name: test-ocsp-rsa-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1699,7 +1699,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1707,7 +1707,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1786,7 +1786,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1794,7 +1794,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1873,7 +1873,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-valid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1881,7 +1881,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -1960,7 +1960,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-invalid-cert-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -1968,7 +1968,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-soft-fail-v4.4-python3.10-min-deps commands: @@ -2047,7 +2047,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-soft-fail-latest-python3.15.0rc2 + - name: test-ocsp-rsa-soft-fail-latest-python3.15 commands: - func: run tests vars: @@ -2055,7 +2055,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-valid-cert-server-staples-v4.4-python3.10-min-deps commands: @@ -2162,7 +2162,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-valid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2170,7 +2170,7 @@ tasks: OCSP_SERVER_TYPE: valid TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2281,7 +2281,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2289,7 +2289,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2400,7 +2400,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-valid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2408,7 +2408,7 @@ tasks: OCSP_SERVER_TYPE: valid-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2519,7 +2519,7 @@ tasks: - ocsp-rsa - rapid - ocsp-staple - - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-invalid-cert-server-staples-latest-python3.15 commands: - func: run tests vars: @@ -2527,7 +2527,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - ocsp - ocsp-rsa @@ -2610,7 +2610,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -2618,7 +2618,7 @@ tasks: OCSP_SERVER_TYPE: revoked TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2697,7 +2697,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-delegate-malicious-invalid-cert-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -2705,7 +2705,7 @@ tasks: OCSP_SERVER_TYPE: revoked-delegate TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-v4.4-python3.10-min-deps commands: @@ -2784,7 +2784,7 @@ tasks: UV_PYTHON: "3.10" TEST_MIN_DEPS: "1" tags: [ocsp, ocsp-rsa, rapid] - - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15.0rc2 + - name: test-ocsp-rsa-malicious-no-responder-muststaple-server-does-not-staple-latest-python3.15 commands: - func: run tests vars: @@ -2792,7 +2792,7 @@ tasks: OCSP_SERVER_TYPE: no-responder TEST_NAME: ocsp VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: [ocsp, ocsp-rsa, latest] # Oidc tests @@ -2999,7 +2999,7 @@ tasks: SSL: nossl TOPOLOGY: replica_set COVERAGE: "1" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - server-version @@ -3241,7 +3241,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - server-version @@ -3260,7 +3260,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - server-version @@ -3419,7 +3419,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - server-version @@ -3438,7 +3438,7 @@ tasks: AUTH: auth SSL: ssl TOPOLOGY: sharded_cluster - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - server-version @@ -3634,7 +3634,7 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - server-version @@ -3656,7 +3656,7 @@ tasks: SSL: nossl TOPOLOGY: standalone COVERAGE: "1" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - server-version @@ -3786,7 +3786,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "4.4" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - test-standard @@ -3945,7 +3945,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "5.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - test-standard @@ -4174,7 +4174,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - test-standard @@ -4332,7 +4332,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "7.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - test-standard @@ -4376,7 +4376,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - test-standard @@ -4490,7 +4490,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "8.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - test-standard @@ -4535,7 +4535,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "9.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - test-standard @@ -4649,7 +4649,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - test-standard @@ -4699,7 +4699,7 @@ tasks: TOPOLOGY: replica_set VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_async tags: - test-standard @@ -4750,7 +4750,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_async tags: - test-standard @@ -4845,7 +4845,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: rapid - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t TEST_NAME: default_sync tags: - test-standard @@ -4890,7 +4890,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" TEST_NAME: default_sync tags: - test-standard @@ -4958,7 +4958,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "8.2" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-string-query-preview - server-8.2 @@ -5154,7 +5154,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: "6.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard - server-6.0 @@ -5220,7 +5220,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "6.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-non-standard - server-6.0 @@ -5370,7 +5370,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: "8.0" - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-non-standard - server-8.0 @@ -5480,7 +5480,7 @@ tasks: SSL: nossl TOPOLOGY: standalone VERSION: "9.0" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard - server-9.0 @@ -5501,7 +5501,7 @@ tasks: SSL: ssl TOPOLOGY: replica_set VERSION: latest - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-non-standard - server-latest @@ -5547,7 +5547,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard - server-latest @@ -5570,7 +5570,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: latest - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-non-standard-no-cov - server-latest @@ -5697,11 +5697,11 @@ tasks: - vector - python-3.10 - test-numpy - - name: test-numpy-python3.15-python3.15.0rc2-cov + - name: test-numpy-python3.15-python3.15-cov commands: - func: test numpy vars: - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" COVERAGE: "1" tags: - binary @@ -5988,7 +5988,7 @@ tasks: TOPOLOGY: sharded_cluster VERSION: latest COVERAGE: "1" - UV_PYTHON: 3.15.0rc2 + UV_PYTHON: "3.15" tags: - test-standard-auth - server-latest @@ -6032,7 +6032,7 @@ tasks: SSL: ssl TOPOLOGY: sharded_cluster VERSION: rapid - UV_PYTHON: 3.15.0rc2t + UV_PYTHON: 3.15t tags: - test-standard-auth - server-rapid diff --git a/.evergreen/scripts/fetch-python.sh b/.evergreen/scripts/fetch-python.sh index 494d251848..bd43b13e94 100755 --- a/.evergreen/scripts/fetch-python.sh +++ b/.evergreen/scripts/fetch-python.sh @@ -1,18 +1,20 @@ #!/bin/bash -# Download a Python build from python-build-standalone and print the directory -# uv should use for it. Temporary: uv does not yet index Python 3.15 -# pre-releases, so we fetch the build ourselves until the version is available -# in the Evergreen toolchain. See PYTHON-6077. +# Download a Python build from python-build-standalone's latest release and +# print the interpreter directory for uv to use. Invoked when uv cannot +# provide the requested version, for example a pre-release uv has not indexed +# yet. set -eu -version="${UV_PYTHON:?UV_PYTHON must be set}" -# python-build-standalone release tag that carries the builds below. -pbs_tag="20260901" +request="${UV_PYTHON:?UV_PYTHON must be set}" +# Free-threaded builds are published under a separate asset. +variant="" +version="$request" case "$version" in - 3.15.0rc2t) interpreter="3.15.0rc2"; variant="-freethreaded" ;; - 3.15.0rc2) interpreter="3.15.0rc2"; variant="" ;; - *) echo "No python-build-standalone build configured for Python $version" >&2; exit 1 ;; + *t) + variant="-freethreaded" + version="${version%t}" + ;; esac case "$(uname -s)" in @@ -28,17 +30,29 @@ case "$(uname -m)" in *) echo "Unsupported architecture $(uname -m)" >&2; exit 1 ;; esac -asset="cpython-${interpreter}+${pbs_tag}-${target_arch}${target_os}${variant}-install_only.tar.gz" -url="https://github.com/astral-sh/python-build-standalone/releases/download/${pbs_tag}/${asset//+/%2B}" +# The latest python-build-standalone release carries one build per minor +# version, e.g. cpython-3.15.0rc2+20260901-aarch64-apple-darwin-install_only.tar.gz. +release="$(curl -fsSL --retry 3 https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest)" +tag="$(printf '%s' "$release" | sed -nE 's/.*"tag_name": *"([^"]+)".*/\1/p')" +asset="$(printf '%s' "$release" \ + | grep -oE "cpython-${version//./\\.}\\.[^\"]*-${target_arch}${target_os}${variant}-install_only\\.tar\\.gz" \ + | head -1)" -# Use a native path on Windows: bash reports MSYS paths (e.g. /home/user) -# that the native Windows uv binary cannot resolve. Normalize backslashes -# to forward slashes, which both uv and the shell's tar accept. -dest="${base_dir}/.cache/python-build-standalone/${version}/${target_arch}${target_os}" +if [ -z "$asset" ]; then + echo "No python-build-standalone build for Python $request" >&2 + exit 1 +fi + +url="https://github.com/astral-sh/python-build-standalone/releases/download/${tag}/${asset//+/%2B}" + +# Use a native path on Windows: bash reports MSYS paths (e.g. /home/user) that +# the native Windows uv binary cannot resolve. Normalize backslashes to forward +# slashes, which both uv and the shell's tar accept. +dest="${base_dir}/.cache/python-build-standalone/${request}/${target_arch}${target_os}" dest="$(printf '%s' "$dest" | tr '\\' '/')" if [ ! -d "$dest/python" ]; then mkdir -p "$dest" - echo "Downloading Python ${version} from python-build-standalone" >&2 + echo "Downloading Python $request from python-build-standalone" >&2 curl -fL --retry 3 "$url" | tar -xz -C "$dest" fi echo "$dest/python" diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 248567c7e9..0694bcdc57 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -14,11 +14,11 @@ DEFAULT_HOST, HOSTS, MIN_MAX_PYTHON, + NON_TOOLCHAIN_VERSIONS, OTHER_HOSTS, PYPYS, SYNCS, TOPOLOGIES, - UV_PYTHON_VERSIONS, create_variant, get_assume_role, get_s3_put, @@ -972,7 +972,7 @@ def create_mod_wsgi_tasks(): # Skip free-threaded builds and versions not yet in the toolchain: # mod_wsgi must be compiled against the toolchain python, and no # mod_wsgi module exists for a version the toolchain lacks. - if "t" in python or python in UV_PYTHON_VERSIONS: + if "t" in python or python in NON_TOOLCHAIN_VERSIONS: continue if test == "standalone": task_name = "mod-wsgi-" diff --git a/.evergreen/scripts/generate_config_utils.py b/.evergreen/scripts/generate_config_utils.py index 341dcabcd3..a651407c03 100644 --- a/.evergreen/scripts/generate_config_utils.py +++ b/.evergreen/scripts/generate_config_utils.py @@ -27,19 +27,16 @@ MIN_SUPPORT_VERSIONS = ["3.9", "pypy3.9", "pypy3.10"] ALL_PYTHONS = CPYTHONS + PYPYS MIN_MAX_PYTHON = [CPYTHONS[0], CPYTHONS[-1]] -# Python versions that are not provisioned in the Evergreen toolchain, mapped -# to the exact version uv must be requested to install (uv only installs a -# pre-release when asked for its full version). Drop an entry once the -# toolchain provides the version. -UV_PYTHON_VERSIONS = { - "3.15": "3.15.0rc2", - "3.15t": "3.15.0rc2t", -} +# Python versions not yet provisioned by the Evergreen toolchain. Tasks that +# require a toolchain-provided artifact, such as mod_wsgi, must skip these; +# everything else fetches them from python-build-standalone via +# fetch-python.sh. Drop an entry once the toolchain provides the version. +NON_TOOLCHAIN_VERSIONS = {"3.15", "3.15t"} def set_version_var(env: dict[str, str], version: str) -> None: """Set the env var on task vars that selects the given Python version.""" - env["UV_PYTHON"] = UV_PYTHON_VERSIONS.get(version, version) + env["UV_PYTHON"] = version BATCHTIME_WEEK = 10080 diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 293cbcb32d..acb42ed658 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -19,21 +19,6 @@ fi # Handle the value for UV_PYTHON. . $HERE/setup-uv-python.sh -# Python 3.15 pre-releases are not yet in the Evergreen toolchain or uv's -# download index, so install them explicitly and fall back to fetching a -# python-build-standalone build when uv cannot provide one. The fallback is -# temporary until these versions reach the toolchain. Other versions resolve -# through the toolchain or uv on their own. -if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]] && [[ "$UV_PYTHON" == 3.15* ]]; then - if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then - _interpreter="$(bash $HERE/fetch-python.sh)" || { - echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 - exit 1 - } - export UV_PYTHON="$_interpreter" - fi -fi - # Ensure dependencies are installed. bash $HERE/install-dependencies.sh @@ -43,6 +28,20 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi +# When uv cannot provide the requested version (for example, a pre-release uv +# has not indexed yet), fetch it from python-build-standalone's latest release +# and put it on the path. +if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then + if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then + _interpreter="$(bash $HERE/fetch-python.sh)" || { + echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 + exit 1 + } + export UV_PYTHON="$_interpreter" + export PATH="$_interpreter/bin:$PATH" + fi +fi + # Add the default install path to the path if needed. if [ -z "${PYMONGO_BIN_DIR:-}" ]; then export PATH="$PATH:$HOME/.local/bin" From 2a2c0c63486abd41169e26df4a215ec31855840b Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 08:08:34 -0500 Subject: [PATCH 07/27] PYTHON-6077 Clarify python download conditions in setup-dev-env --- .evergreen/scripts/setup-dev-env.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index acb42ed658..1d751e525c 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -28,9 +28,11 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -# When uv cannot provide the requested version (for example, a pre-release uv -# has not indexed yet), fetch it from python-build-standalone's latest release -# and put it on the path. +# Only a bare version (e.g. "3.15") can trigger a download. setup-uv-python.sh +# turns toolchain and system Pythons into absolute paths, which the checks +# below skip, so a download means the version is missing from both. Try uv's +# managed install first, and when uv has no build for it, such as a +# pre-release, fall back to python-build-standalone's latest release. if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then _interpreter="$(bash $HERE/fetch-python.sh)" || { From a70b3a558dad5d0a2c43c190f1cff29d451917eb Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 08:27:19 -0500 Subject: [PATCH 08/27] Handle x86_64 architecture for Windows and others Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .evergreen/scripts/fetch-python.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/fetch-python.sh b/.evergreen/scripts/fetch-python.sh index bd43b13e94..9dbfb73580 100755 --- a/.evergreen/scripts/fetch-python.sh +++ b/.evergreen/scripts/fetch-python.sh @@ -26,7 +26,13 @@ esac case "$(uname -m)" in arm64 | aarch64) target_arch="aarch64" ;; - x86_64) target_arch="x86_64" ;; + x86_64) + if [ "Windows_NT" = "${OS:-}" ] && [ -n "${IS_WIN32:-}" ]; then + target_arch="i686" + else + target_arch="x86_64" + fi + ;; *) echo "Unsupported architecture $(uname -m)" >&2; exit 1 ;; esac From 5a34041c78becb8b767ae50e4a084707f81dc919 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 08:36:56 -0500 Subject: [PATCH 09/27] Refactor Python interpreter setup in setup-dev-env.sh Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .evergreen/scripts/setup-dev-env.sh | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 1d751e525c..d03e810949 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -35,13 +35,30 @@ fi # pre-release, fall back to python-build-standalone's latest release. if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then - _interpreter="$(bash $HERE/fetch-python.sh)" || { + _prefix="$(bash "$HERE/fetch-python.sh")" || { echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 exit 1 } + + if [ -x "$_prefix/bin/python3" ]; then + _interpreter="$_prefix/bin/python3" + _path_dir="$_prefix/bin" + elif [ -x "$_prefix/bin/python3t" ]; then + _interpreter="$_prefix/bin/python3t" + _path_dir="$_prefix/bin" + elif [ -x "$_prefix/bin/python" ]; then + _interpreter="$_prefix/bin/python" + _path_dir="$_prefix/bin" + elif [ -f "$_prefix/python.exe" ]; then + _interpreter="$_prefix/python.exe" + _path_dir="$_prefix" + else + echo "No Python interpreter found under $_prefix" >&2 + exit 1 + fi + export UV_PYTHON="$_interpreter" - export PATH="$_interpreter/bin:$PATH" - fi + export PATH="$_path_dir:$PATH" fi # Add the default install path to the path if needed. From f3acdf1893a5a4c4c651e24befbbaf786a776592 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 09:17:41 -0500 Subject: [PATCH 10/27] PYTHON-6077 Fix missing fi in setup-dev-env.sh --- .evergreen/scripts/setup-dev-env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index d03e810949..0cded3994a 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -59,6 +59,7 @@ if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/ export UV_PYTHON="$_interpreter" export PATH="$_path_dir:$PATH" + fi fi # Add the default install path to the path if needed. From 133c3bbdb43af17a688061894ac56c68b07c20a9 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 10:46:27 -0500 Subject: [PATCH 11/27] PYTHON-6077 Accept unpadded/whitespace-padded keytab on 3.15 --- .evergreen/scripts/setup_tests.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup_tests.py b/.evergreen/scripts/setup_tests.py index 93db297cfd..9d033114ea 100644 --- a/.evergreen/scripts/setup_tests.py +++ b/.evergreen/scripts/setup_tests.py @@ -290,7 +290,9 @@ def handle_test_env() -> None: krb_conf.touch() write_env("KRB5_CONFIG", krb_conf) LOGGER.info("Writing keytab") - keytab_b64 = config["KEYTAB_BASE64"] + # The secret may carry trailing whitespace or omit padding; Python + # 3.15's base64.b64decode rejects both. + keytab_b64 = config["KEYTAB_BASE64"].strip() keytab = base64.b64decode(keytab_b64 + "=" * (-len(keytab_b64) % 4)) keytab_file = ROOT / ".evergreen/drivers.keytab" with keytab_file.open("wb") as fid: From 1f56904e03473433f7da7d47a46055ac563338ea Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 12:00:25 -0500 Subject: [PATCH 12/27] PYTHON-6077 Strip internal whitespace from keytab base64 --- .evergreen/scripts/setup_tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup_tests.py b/.evergreen/scripts/setup_tests.py index 9d033114ea..5680218a1f 100644 --- a/.evergreen/scripts/setup_tests.py +++ b/.evergreen/scripts/setup_tests.py @@ -290,9 +290,9 @@ def handle_test_env() -> None: krb_conf.touch() write_env("KRB5_CONFIG", krb_conf) LOGGER.info("Writing keytab") - # The secret may carry trailing whitespace or omit padding; Python - # 3.15's base64.b64decode rejects both. - keytab_b64 = config["KEYTAB_BASE64"].strip() + # The secret may carry whitespace or omit padding; Python 3.15's + # base64.b64decode rejects both. + keytab_b64 = "".join(config["KEYTAB_BASE64"].split()) keytab = base64.b64decode(keytab_b64 + "=" * (-len(keytab_b64) % 4)) keytab_file = ROOT / ".evergreen/drivers.keytab" with keytab_file.open("wb") as fid: From 473ed18091e7dcb087f21ed30d2f8d10a4f663ff Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 12:52:30 -0500 Subject: [PATCH 13/27] PYTHON-6077 Decode keytab with lenient padding on 3.15 --- .evergreen/scripts/setup_tests.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup_tests.py b/.evergreen/scripts/setup_tests.py index 5680218a1f..2a2317a7cf 100644 --- a/.evergreen/scripts/setup_tests.py +++ b/.evergreen/scripts/setup_tests.py @@ -290,10 +290,14 @@ def handle_test_env() -> None: krb_conf.touch() write_env("KRB5_CONFIG", krb_conf) LOGGER.info("Writing keytab") - # The secret may carry whitespace or omit padding; Python 3.15's - # base64.b64decode rejects both. + # Python 3.15's base64.b64decode rejects missing padding (and + # whitespace) by default, so strip whitespace and use padded=False + # where available to accept both padded and unpadded input. keytab_b64 = "".join(config["KEYTAB_BASE64"].split()) - keytab = base64.b64decode(keytab_b64 + "=" * (-len(keytab_b64) % 4)) + try: + keytab = base64.b64decode(keytab_b64, padded=False) + except TypeError: + keytab = base64.b64decode(keytab_b64) keytab_file = ROOT / ".evergreen/drivers.keytab" with keytab_file.open("wb") as fid: fid.write(keytab) From 778de0607e68c30e16f0a290013e99923fdaa930 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 13:58:14 -0500 Subject: [PATCH 14/27] PYTHON-6077 Make test_list_collections robust to empty test db --- test/test_typing.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_typing.py b/test/test_typing.py index 5ec58e5195..2bce64a117 100644 --- a/test/test_typing.py +++ b/test/test_typing.py @@ -203,6 +203,9 @@ def test_command(self) -> None: result.items() def test_list_collections(self) -> None: + # list_collections() returns an empty cursor when the database has no + # collections, so create one first to guarantee next() succeeds. + self.client.test.pymongo_test_typing.insert_one({}) cursor = self.client.test.list_collections() value = cursor.next() value.items() From 27bcd1e28fe5193232c0dca96bf7c13a21a714ac Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 15:55:23 -0500 Subject: [PATCH 15/27] PYTHON-6077 Clone drivers-tools module regardless of env.sh --- .evergreen/scripts/configure-env.sh | 35 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 8dc328aab3..8351096daa 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -43,15 +43,31 @@ fi SCRIPT_DIR="$PROJECT_DIRECTORY/.evergreen/scripts" +export MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" +export MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" + +# Always clone the drivers-tools module at the desired branch. The env.sh +# early-exit below must not skip this, otherwise a pre-existing env.sh leaves +# the module on whatever branch it was first provisioned from. +rm -rf $DRIVERS_TOOLS +BRANCH=master +ORG=mongodb-labs +git clone --branch $BRANCH https://github.com/$ORG/drivers-evergreen-tools.git $DRIVERS_TOOLS + +# Write the .env file for drivers-tools. +cat < ${DRIVERS_TOOLS}/.env +SKIP_LEGACY_SHELL=1 +DRIVERS_TOOLS="$DRIVERS_TOOLS" +MONGO_ORCHESTRATION_HOME="$MONGO_ORCHESTRATION_HOME" +MONGODB_BINARIES="$MONGODB_BINARIES" +EOT + if [ -f "$SCRIPT_DIR/env.sh" ]; then echo "Reading $SCRIPT_DIR/env.sh file" . "$SCRIPT_DIR/env.sh" exit 0 fi -export MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" -export MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" - cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" export CURRENT_VERSION="$CURRENT_VERSION" @@ -72,19 +88,6 @@ export PROJECT="${project:-mongo-python-driver}" export PIP_QUIET=1 EOT -# Write the .env file for drivers-tools. -rm -rf $DRIVERS_TOOLS -BRANCH=master -ORG=mongodb-labs -git clone --branch $BRANCH https://github.com/$ORG/drivers-evergreen-tools.git $DRIVERS_TOOLS - -cat < ${DRIVERS_TOOLS}/.env -SKIP_LEGACY_SHELL=1 -DRIVERS_TOOLS="$DRIVERS_TOOLS" -MONGO_ORCHESTRATION_HOME="$MONGO_ORCHESTRATION_HOME" -MONGODB_BINARIES="$MONGODB_BINARIES" -EOT - # Add these expansions to make it easier to call out tests scripts from the EVG yaml cat < expansion.yml DRIVERS_TOOLS: "$DRIVERS_TOOLS" From 269e79bc790a0027bf6540dec92ca8d248e161ee Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 18:42:36 -0500 Subject: [PATCH 16/27] PYTHON-6077 Use PATH-based Python resolution with bare UV_PYTHON --- .evergreen/generated_configs/variants.yml | 1 - .evergreen/scripts/generate_config.py | 2 -- .evergreen/scripts/setup-dev-env.sh | 29 ++++++------------- .evergreen/scripts/setup-uv-python.sh | 34 ++++++++++++++++------- 4 files changed, 32 insertions(+), 34 deletions(-) diff --git a/.evergreen/generated_configs/variants.yml b/.evergreen/generated_configs/variants.yml index d19aba0972..5291647eaf 100644 --- a/.evergreen/generated_configs/variants.yml +++ b/.evergreen/generated_configs/variants.yml @@ -11,7 +11,6 @@ buildvariants: VERSION: latest NO_EXT: "1" REQUIRE_FIPS: "1" - UV_PYTHON: /usr/bin/python3.11 tags: [] - name: other-hosts-rhel8-zseries-latest tasks: diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 0694bcdc57..be76a283d5 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -581,8 +581,6 @@ def create_alternative_hosts_variants(): tags = [] if "fips" in host_name.lower(): expansions["REQUIRE_FIPS"] = "1" - # Use explicit Python 3.11 binary on the host since the default python3 is 3.9. - expansions["UV_PYTHON"] = "/usr/bin/python3.11" if "amazon" in host_name.lower(): tags.append("pr") variants.append( diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 0cded3994a..a340165eb0 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -28,36 +28,23 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -# Only a bare version (e.g. "3.15") can trigger a download. setup-uv-python.sh -# turns toolchain and system Pythons into absolute paths, which the checks -# below skip, so a download means the version is missing from both. Try uv's -# managed install first, and when uv has no build for it, such as a -# pre-release, fall back to python-build-standalone's latest release. -if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" != /* ]] && [[ "$UV_PYTHON" != ?:/* ]]; then +# UV_PYTHON is a bare version identifier (e.g. 3.14), never a path. A download +# only happens when no toolchain Python matches it (PYTHON_FOUND unset): try +# uv's managed build first, and when uv has no build (e.g. a pre-release), fall +# back to python-build-standalone's latest release, putting the interpreter's +# bin directory on the path so uv resolves UV_PYTHON. +if [ -n "${UV_PYTHON:-}" ] && [ "${PYTHON_FOUND:-}" != "1" ]; then if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then _prefix="$(bash "$HERE/fetch-python.sh")" || { echo "Failed to obtain a Python $UV_PYTHON interpreter" >&2 exit 1 } - if [ -x "$_prefix/bin/python3" ]; then - _interpreter="$_prefix/bin/python3" - _path_dir="$_prefix/bin" - elif [ -x "$_prefix/bin/python3t" ]; then - _interpreter="$_prefix/bin/python3t" - _path_dir="$_prefix/bin" - elif [ -x "$_prefix/bin/python" ]; then - _interpreter="$_prefix/bin/python" - _path_dir="$_prefix/bin" - elif [ -f "$_prefix/python.exe" ]; then - _interpreter="$_prefix/python.exe" + if [ -f "$_prefix/python.exe" ]; then _path_dir="$_prefix" else - echo "No Python interpreter found under $_prefix" >&2 - exit 1 + _path_dir="$_prefix/bin" fi - - export UV_PYTHON="$_interpreter" export PATH="$_path_dir:$PATH" fi fi diff --git a/.evergreen/scripts/setup-uv-python.sh b/.evergreen/scripts/setup-uv-python.sh index 8ad8c461aa..bf86911024 100755 --- a/.evergreen/scripts/setup-uv-python.sh +++ b/.evergreen/scripts/setup-uv-python.sh @@ -18,16 +18,29 @@ if [ -f $HERE/test-env.sh ]; then . $HERE/test-env.sh fi -# Always use UV_PYTHON to select the Python version. +# Prefer system/toolchain interpreters over uv-managed downloads. +export UV_PYTHON_PREFERENCE=system + +# UV_PYTHON is always a version identifier (e.g. 3.14), never a path. uv +# discovers the interpreter itself, so a matching toolchain (system) Python is +# put on the path instead of pointing UV_PYTHON at it. if [ -z "${UV_PYTHON:-}" ]; then - export UV_PYTHON="$_python" + if [ "${REQUIRE_FIPS:-}" = "1" ]; then + # FIPS hosts provision a specific Python; put its directory first on the + # path and leave UV_PYTHON unset so uv resolves the interpreter from PATH. + export PATH="/usr/bin:$PATH" + else + export UV_PYTHON="$_python" + fi fi -# Prefer a toolchain (system) python over a uv-managed download: resolve a -# bare version like 3.10 or 3.14t to the toolchain interpreter when one is -# installed, and put its directory on the path. Anything else (a path, or a -# version uv must install itself, such as a pre-release) is left alone. -if [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then +# Whether a toolchain Python matching UV_PYTHON was found on the host. +PYTHON_FOUND=0 +# Prefer a toolchain (system) python over a uv-managed download: when a +# matching toolchain interpreter is installed, put its bin directory on the +# path and let uv pick it up. Versions uv must install itself (pre-releases) +# are left for the install/fetch fallback in setup-dev-env.sh. +if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then case "$(uname -s)" in Darwin) if [[ "$UV_PYTHON" == *"t"* ]]; then @@ -40,8 +53,8 @@ if [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then _version="${UV_PYTHON%t}" _bin_dir="/Library/Frameworks/${framework_dir}.Framework/Versions/$_version/bin" if [ -x "$_bin_dir/$binary_name" ]; then - export UV_PYTHON="$_bin_dir/$binary_name" export PATH="$_bin_dir:$PATH" + PYTHON_FOUND=1 fi ;; *) @@ -58,16 +71,17 @@ if [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then _bin_dir="C:/python/Python${_dir}" fi if [ -f "$_bin_dir/$_exe" ]; then - export UV_PYTHON="$_bin_dir/$_exe" export PATH="$_bin_dir:$PATH" + PYTHON_FOUND=1 fi else _bin_dir="/opt/python/$UV_PYTHON/bin" if [ -x "$_bin_dir/python3" ]; then - export UV_PYTHON="$_bin_dir/python3" export PATH="$_bin_dir:$PATH" + PYTHON_FOUND=1 fi fi ;; esac fi +export PYTHON_FOUND From 95e0e908d632ad36f6fea3424fb090880d7dd0d2 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 18:56:59 -0500 Subject: [PATCH 17/27] PYTHON-6077 Scope UV_PYTHON_PREFERENCE=system to non-Windows --- .evergreen/scripts/setup-uv-python.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/setup-uv-python.sh b/.evergreen/scripts/setup-uv-python.sh index bf86911024..ae9b462fac 100755 --- a/.evergreen/scripts/setup-uv-python.sh +++ b/.evergreen/scripts/setup-uv-python.sh @@ -18,8 +18,12 @@ if [ -f $HERE/test-env.sh ]; then . $HERE/test-env.sh fi -# Prefer system/toolchain interpreters over uv-managed downloads. -export UV_PYTHON_PREFERENCE=system +# Prefer system/toolchain interpreters over uv-managed downloads. Skip on +# Windows, where the first python3 on the path is a broken Chocolatey shim that +# uv cannot inspect. +if [ "Windows_NT" != "${OS:-}" ]; then + export UV_PYTHON_PREFERENCE=system +fi # UV_PYTHON is always a version identifier (e.g. 3.14), never a path. uv # discovers the interpreter itself, so a matching toolchain (system) Python is From ea36a45587a54575aba48dfdec74968526efd193 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 8 Sep 2026 20:55:48 -0500 Subject: [PATCH 18/27] PYTHON-6077 Use path-based UV_PYTHON on Windows --- .evergreen/scripts/setup-dev-env.sh | 37 +++++++++++++++++++++------ .evergreen/scripts/setup-uv-python.sh | 10 +++++--- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index a340165eb0..8b44bc55f2 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -28,11 +28,12 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -# UV_PYTHON is a bare version identifier (e.g. 3.14), never a path. A download -# only happens when no toolchain Python matches it (PYTHON_FOUND unset): try -# uv's managed build first, and when uv has no build (e.g. a pre-release), fall -# back to python-build-standalone's latest release, putting the interpreter's -# bin directory on the path so uv resolves UV_PYTHON. +# UV_PYTHON is a bare version identifier on Linux/macOS; a matching interpreter +# is put on the path so uv resolves it. On Windows uv cannot resolve a bare +# version without tripping over a broken Chocolatey python3 shim, so UV_PYTHON +# is set to the fetched interpreter path. A download only happens when no +# toolchain Python matches (PYTHON_FOUND unset): try uv's managed build first, +# and fall back to python-build-standalone's latest release. if [ -n "${UV_PYTHON:-}" ] && [ "${PYTHON_FOUND:-}" != "1" ]; then if ! uv python install "$UV_PYTHON" >/dev/null 2>&1; then _prefix="$(bash "$HERE/fetch-python.sh")" || { @@ -40,10 +41,30 @@ if [ -n "${UV_PYTHON:-}" ] && [ "${PYTHON_FOUND:-}" != "1" ]; then exit 1 } - if [ -f "$_prefix/python.exe" ]; then - _path_dir="$_prefix" + if [ "Windows_NT" = "${OS:-}" ]; then + if [ -x "$_prefix/bin/python3" ]; then + _interpreter="$_prefix/bin/python3" + _path_dir="$_prefix/bin" + elif [ -x "$_prefix/bin/python3t" ]; then + _interpreter="$_prefix/bin/python3t" + _path_dir="$_prefix/bin" + elif [ -x "$_prefix/bin/python" ]; then + _interpreter="$_prefix/bin/python" + _path_dir="$_prefix/bin" + elif [ -f "$_prefix/python.exe" ]; then + _interpreter="$_prefix/python.exe" + _path_dir="$_prefix" + else + echo "No Python interpreter found under $_prefix" >&2 + exit 1 + fi + export UV_PYTHON="$_interpreter" else - _path_dir="$_prefix/bin" + if [ -f "$_prefix/python.exe" ]; then + _path_dir="$_prefix" + else + _path_dir="$_prefix/bin" + fi fi export PATH="$_path_dir:$PATH" fi diff --git a/.evergreen/scripts/setup-uv-python.sh b/.evergreen/scripts/setup-uv-python.sh index ae9b462fac..9cf923a43d 100755 --- a/.evergreen/scripts/setup-uv-python.sh +++ b/.evergreen/scripts/setup-uv-python.sh @@ -25,9 +25,10 @@ if [ "Windows_NT" != "${OS:-}" ]; then export UV_PYTHON_PREFERENCE=system fi -# UV_PYTHON is always a version identifier (e.g. 3.14), never a path. uv -# discovers the interpreter itself, so a matching toolchain (system) Python is -# put on the path instead of pointing UV_PYTHON at it. +# UV_PYTHON is a version identifier (e.g. 3.14) on Linux/macOS, where uv +# discovers a matching toolchain Python from the path. On Windows uv cannot +# reliably resolve a bare version (its path search trips over a broken +# Chocolatey python3 shim), so UV_PYTHON is set to the interpreter path there. if [ -z "${UV_PYTHON:-}" ]; then if [ "${REQUIRE_FIPS:-}" = "1" ]; then # FIPS hosts provision a specific Python; put its directory first on the @@ -75,6 +76,9 @@ if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then _bin_dir="C:/python/Python${_dir}" fi if [ -f "$_bin_dir/$_exe" ]; then + # Windows: point UV_PYTHON at the interpreter (path-based) so uv does + # not probe the path and trip over a broken Chocolatey python3 shim. + export UV_PYTHON="$_bin_dir/$_exe" export PATH="$_bin_dir:$PATH" PYTHON_FOUND=1 fi From 461b5b1729b9eca933db96d19a16706f1c686dba Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 05:10:02 -0500 Subject: [PATCH 19/27] PYTHON-6077 Skip fetch fallback on re-entry by marking Python resolved --- .evergreen/scripts/setup-dev-env.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 8b44bc55f2..2391135853 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -67,6 +67,10 @@ if [ -n "${UV_PYTHON:-}" ] && [ "${PYTHON_FOUND:-}" != "1" ]; then fi fi export PATH="$_path_dir:$PATH" + # Mark the interpreter as resolved so a later setup-dev-env.sh invocation + # (just.sh is sourced once per just command) does not re-enter the fallback + # with UV_PYTHON now set to a path. + export PYTHON_FOUND=1 fi fi From 81ca2a48bf711190d4433a6ea3b0980392fdc81b Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 05:17:52 -0500 Subject: [PATCH 20/27] PYTHON-6077 Add KMS-DEBUG ssl diagnostics (temporary) --- pymongo/network_layer.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index dbb3e9f903..1599e95900 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -102,6 +102,13 @@ def _is_ready(fut: Future[Any]) -> None: return fut.set_result(None) + # [KMS-DEBUG] temporary diagnostics + try: + _dbg = f"version={sock.version()!r} cipher={sock.cipher()!r}" + except Exception: + _dbg = "version=? cipher=?" + print(f"[KMS-DEBUG] sendall_ssl start len={len(buf)} {_dbg}", file=sys.stderr, flush=True) # noqa: T201 + while sent < len(buf): try: sent += sock.send(view[sent:]) @@ -133,6 +140,14 @@ def _is_ready(fut: Future[Any]) -> None: finally: loop.remove_reader(fd) loop.remove_writer(fd) + except Exception as _dbg_exc: + # [KMS-DEBUG] temporary diagnostics + print( # noqa: T201 + f"[KMS-DEBUG] sendall_ssl FAILED sent={sent}/{len(buf)}: {type(_dbg_exc).__name__}: {_dbg_exc}", + file=sys.stderr, + flush=True, + ) + raise async def _async_socket_receive_ssl( conn: _sslConn, length: int, loop: AbstractEventLoop, once: Optional[bool] = False @@ -145,6 +160,17 @@ def _is_ready(fut: Future[Any]) -> None: return fut.set_result(None) + # [KMS-DEBUG] temporary diagnostics + try: + _dbg = f"version={conn.version()!r} cipher={conn.cipher()!r}" + except Exception: + _dbg = "version=? cipher=?" + print( # noqa: T201 + f"[KMS-DEBUG] receive_ssl start length={length} once={once} {_dbg}", + file=sys.stderr, + flush=True, + ) + while total_read < length: try: read = conn.recv_into(mv[total_read:]) @@ -182,6 +208,14 @@ def _is_ready(fut: Future[Any]) -> None: finally: loop.remove_reader(fd) loop.remove_writer(fd) + except Exception as _dbg_exc: + # [KMS-DEBUG] temporary diagnostics + print( # noqa: T201 + f"[KMS-DEBUG] receive_ssl FAILED total_read={total_read}/{length}: {type(_dbg_exc).__name__}: {_dbg_exc}", + file=sys.stderr, + flush=True, + ) + raise return mv else: From 3c6ec12dd5b0d819d1cc74d3e756ab7d01bb0aee Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 05:25:48 -0500 Subject: [PATCH 21/27] PYTHON-6077 Treat path UV_PYTHON as already resolved --- .evergreen/scripts/setup-uv-python.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.evergreen/scripts/setup-uv-python.sh b/.evergreen/scripts/setup-uv-python.sh index 9cf923a43d..95629ff206 100755 --- a/.evergreen/scripts/setup-uv-python.sh +++ b/.evergreen/scripts/setup-uv-python.sh @@ -41,11 +41,12 @@ fi # Whether a toolchain Python matching UV_PYTHON was found on the host. PYTHON_FOUND=0 -# Prefer a toolchain (system) python over a uv-managed download: when a -# matching toolchain interpreter is installed, put its bin directory on the -# path and let uv pick it up. Versions uv must install itself (pre-releases) -# are left for the install/fetch fallback in setup-dev-env.sh. -if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then +# UV_PYTHON may already be an absolute path, e.g. the Windows toolchain path +# resolved on a prior invocation. A path is already usable, so it is treated as +# found and never triggers a download. +if [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" == /* || "$UV_PYTHON" == ?:/* ]]; then + PYTHON_FOUND=1 +elif [ -n "${UV_PYTHON:-}" ] && [[ "$UV_PYTHON" =~ ^3\.[0-9]+t?$ ]]; then case "$(uname -s)" in Darwin) if [[ "$UV_PYTHON" == *"t"* ]]; then From a95b78e4917b69c23c1e34c15b9600b3e6faeb30 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 05:59:17 -0500 Subject: [PATCH 22/27] PYTHON-6077 Exclude 3.15t from encryption and pyopenssl variants --- .evergreen/generated_configs/variants.yml | 34 +++++++++++------------ .evergreen/scripts/generate_config.py | 14 ++++++---- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/.evergreen/generated_configs/variants.yml b/.evergreen/generated_configs/variants.yml index 5291647eaf..e2bbffeed7 100644 --- a/.evergreen/generated_configs/variants.yml +++ b/.evergreen/generated_configs/variants.yml @@ -184,7 +184,7 @@ buildvariants: # Encryption tests - name: encryption-rhel8 tasks: - - name: .test-non-standard + - name: .test-non-standard !python-3.15t - name: .test-string-query-preview display_name: Encryption RHEL8 run_on: @@ -195,8 +195,8 @@ buildvariants: tags: [encryption_tag] - name: encryption-macos tasks: - - name: .test-non-standard !.pypy !.cov - - name: .test-non-standard-no-cov !.pypy + - name: .test-non-standard !.pypy !.cov !python-3.15t + - name: .test-non-standard-no-cov !.pypy !python-3.15t - name: .test-string-query-preview display_name: Encryption macOS run_on: @@ -207,8 +207,8 @@ buildvariants: tags: [encryption_tag] - name: encryption-win64 tasks: - - name: .test-non-standard !.pypy !.cov - - name: .test-non-standard-no-cov !.pypy + - name: .test-non-standard !.pypy !.cov !python-3.15t + - name: .test-non-standard-no-cov !.pypy !python-3.15t - name: .test-string-query-preview display_name: Encryption Win64 run_on: @@ -219,7 +219,7 @@ buildvariants: tags: [encryption_tag] - name: encryption-crypt_shared-rhel8 tasks: - - name: .test-non-standard + - name: .test-non-standard !python-3.15t - name: .test-string-query-preview display_name: Encryption crypt_shared RHEL8 run_on: @@ -231,8 +231,8 @@ buildvariants: tags: [encryption_tag] - name: encryption-crypt_shared-macos tasks: - - name: .test-non-standard !.pypy !.cov - - name: .test-non-standard-no-cov !.pypy + - name: .test-non-standard !.pypy !.cov !python-3.15t + - name: .test-non-standard-no-cov !.pypy !python-3.15t - name: .test-string-query-preview display_name: Encryption crypt_shared macOS run_on: @@ -244,8 +244,8 @@ buildvariants: tags: [encryption_tag] - name: encryption-crypt_shared-win64 tasks: - - name: .test-non-standard !.pypy !.cov - - name: .test-non-standard-no-cov !.pypy + - name: .test-non-standard !.pypy !.cov !python-3.15t + - name: .test-non-standard-no-cov !.pypy !python-3.15t - name: .test-string-query-preview display_name: Encryption crypt_shared Win64 run_on: @@ -257,7 +257,7 @@ buildvariants: tags: [encryption_tag] - name: encryption-pyopenssl-rhel8 tasks: - - name: .test-non-standard + - name: .test-non-standard !python-3.15t display_name: Encryption PyOpenSSL RHEL8 run_on: - rhel87-small @@ -468,8 +468,8 @@ buildvariants: # Pyopenssl tests - name: pyopenssl-rhel8 tasks: - - name: .test-standard .sync - - name: .test-standard .async .replica_set-noauth-ssl + - name: .test-standard !python-3.15t .sync + - name: .test-standard !python-3.15t .async .replica_set-noauth-ssl display_name: PyOpenSSL RHEL8 run_on: - rhel87-small @@ -478,8 +478,8 @@ buildvariants: SUB_TEST_NAME: pyopenssl - name: pyopenssl-macos tasks: - - name: .test-standard !.pypy .sync - - name: .test-standard !.pypy .async .replica_set-noauth-ssl + - name: .test-standard !.pypy !python-3.15t .sync + - name: .test-standard !.pypy !python-3.15t .async .replica_set-noauth-ssl display_name: PyOpenSSL macOS run_on: - macos-14 @@ -488,8 +488,8 @@ buildvariants: SUB_TEST_NAME: pyopenssl - name: pyopenssl-win64 tasks: - - name: .test-standard !.pypy .sync - - name: .test-standard !.pypy .async .replica_set-noauth-ssl + - name: .test-standard !.pypy !python-3.15t .sync + - name: .test-standard !.pypy !python-3.15t .async .replica_set-noauth-ssl display_name: PyOpenSSL Win64 run_on: - windows-2022-latest-small diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index be76a283d5..77987f63bd 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -145,15 +145,15 @@ def get_encryption_expansions(encryption): ): expansions = get_encryption_expansions(encryption) display_name = get_variant_name(encryption, host, **expansions) - tasks = [".test-non-standard", ".test-string-query-preview"] + tasks = [".test-non-standard !python-3.15t", ".test-string-query-preview"] if host != "rhel8": # Exclude PyPy (not tested with encryption on macOS/win64) and coverage tasks # (encryption suites exceed the 60-min timeout with coverage overhead on macOS/win64). # Also include the non-coverage companion tasks (test-non-standard-no-cov) which # carry the "latest" server tasks without COVERAGE=1. tasks = [ - ".test-non-standard !.pypy !.cov", - ".test-non-standard-no-cov !.pypy", + ".test-non-standard !.pypy !.cov !python-3.15t", + ".test-non-standard-no-cov !.pypy !python-3.15t", ".test-string-query-preview", ] variant = create_variant( @@ -172,7 +172,7 @@ def get_encryption_expansions(encryption): expansions = get_encryption_expansions(encryption) display_name = get_variant_name(encryption, host, **expansions) variant = create_variant( - [".test-non-standard"], + [".test-non-standard !python-3.15t"], display_name, host=host, expansions=expansions, @@ -262,7 +262,11 @@ def create_pyopenssl_variants(): for host in ["rhel8", "macos", "win64"]: display_name = get_variant_name(base_name, host) - base_task = ".test-standard" if host == "rhel8" else ".test-standard !.pypy" + base_task = ( + ".test-standard !python-3.15t" + if host == "rhel8" + else ".test-standard !.pypy !python-3.15t" + ) # We only need to run a subset on async. tasks = [f"{base_task} .sync", f"{base_task} .async .replica_set-noauth-ssl"] variants.append( From 0dc57040f00362838a37ef2979b1d4b14f90973a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 06:37:51 -0500 Subject: [PATCH 23/27] PYTHON-6077 Add rich KMS-DEBUG socket diagnostics (temporary) --- pymongo/network_layer.py | 47 ++++++++++++++++++++++++++++++---------- pymongo/pool_shared.py | 16 ++++++++++++++ 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index 1599e95900..8107c77f5b 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -71,6 +71,32 @@ BLOCKING_IO_ERRORS = (BlockingIOError, *BLOCKING_IO_LOOKUP_ERROR, *ssl_support.BLOCKING_IO_ERRORS) +def _kms_debug_sock(conn: Any, where: str) -> None: # [KMS-DEBUG] temporary diagnostics + try: + fileno = conn.fileno() + except Exception: + fileno = "?" + try: + peer = conn.getpeername() + except Exception: + peer = "?" + try: + version = conn.version() + cipher = conn.cipher() + except Exception: + version = cipher = "?" + import traceback + + print( # noqa: T201 + f"[KMS-DEBUG] {where} fileno={fileno} peer={peer} version={version!r} cipher={cipher!r} " + f"type={type(conn).__name__}", + file=sys.stderr, + flush=True, + ) + traceback.print_exc(file=sys.stderr) + print("[KMS-DEBUG] ---- end traceback ----", file=sys.stderr, flush=True) # noqa: T201 + + # These socket-based I/O methods are for KMS requests and any other network operations that do not use # the MongoDB wire protocol async def async_socket_sendall(sock: Union[socket.socket, _sslConn], buf: bytes) -> None: @@ -103,6 +129,11 @@ def _is_ready(fut: Future[Any]) -> None: fut.set_result(None) # [KMS-DEBUG] temporary diagnostics + try: + _dbg2 = f"fileno={sock.fileno()} type={type(sock).__name__}" + except Exception: + _dbg2 = "fileno=? type=?" + print(f"[KMS-DEBUG] sendall_ssl start len={len(buf)} {_dbg2}", file=sys.stderr, flush=True) # noqa: T201 try: _dbg = f"version={sock.version()!r} cipher={sock.cipher()!r}" except Exception: @@ -142,11 +173,7 @@ def _is_ready(fut: Future[Any]) -> None: loop.remove_writer(fd) except Exception as _dbg_exc: # [KMS-DEBUG] temporary diagnostics - print( # noqa: T201 - f"[KMS-DEBUG] sendall_ssl FAILED sent={sent}/{len(buf)}: {type(_dbg_exc).__name__}: {_dbg_exc}", - file=sys.stderr, - flush=True, - ) + _kms_debug_sock(sock, f"sendall_ssl FAILED sent={sent}/{len(buf)}") raise async def _async_socket_receive_ssl( @@ -162,9 +189,9 @@ def _is_ready(fut: Future[Any]) -> None: # [KMS-DEBUG] temporary diagnostics try: - _dbg = f"version={conn.version()!r} cipher={conn.cipher()!r}" + _dbg = f"version={conn.version()!r} cipher={conn.cipher()!r} fileno={conn.fileno()} type={type(conn).__name__}" except Exception: - _dbg = "version=? cipher=?" + _dbg = "version=? cipher=? fileno=? type=?" print( # noqa: T201 f"[KMS-DEBUG] receive_ssl start length={length} once={once} {_dbg}", file=sys.stderr, @@ -210,11 +237,7 @@ def _is_ready(fut: Future[Any]) -> None: loop.remove_writer(fd) except Exception as _dbg_exc: # [KMS-DEBUG] temporary diagnostics - print( # noqa: T201 - f"[KMS-DEBUG] receive_ssl FAILED total_read={total_read}/{length}: {type(_dbg_exc).__name__}: {_dbg_exc}", - file=sys.stderr, - flush=True, - ) + _kms_debug_sock(conn, f"receive_ssl FAILED total_read={total_read}/{length}") raise return mv diff --git a/pymongo/pool_shared.py b/pymongo/pool_shared.py index 8cd546bda6..95621abbe5 100644 --- a/pymongo/pool_shared.py +++ b/pymongo/pool_shared.py @@ -339,6 +339,22 @@ async def _async_configured_socket( # below. raise except (OSError, *SSLErrors) as exc: + # [KMS-DEBUG] temporary diagnostics + try: + import traceback + + try: + _peer = sock.getpeername() + except Exception: + _peer = "?" + print( # noqa: T201 + f"[KMS-DEBUG] connect_ssl FAILED host={host} peer={_peer} exc={type(exc).__name__}: {exc}", + file=sys.stderr, + flush=True, + ) + traceback.print_exc(file=sys.stderr) + except Exception: # noqa: S110 + pass sock.close() # We raise AutoReconnect for transient and permanent SSL handshake # failures alike. Permanent handshake failures, like protocol From f7612738399795da8268fb63ae34a8cf78b63ca5 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 08:07:45 -0500 Subject: [PATCH 24/27] PYTHON-6077 Use blocking SSL I/O for async KMS to fix 3.15 reset Run async KMS SSL send/recv via loop.run_in_executor with the socket in blocking mode, mirroring the synchronous socket path. This replaces the hand-rolled add_reader/add_writer non-blocking machinery that surfaces a peer reset as a raw ConnectionResetError/BrokenPipeError (before any bytes are sent) under asyncio on Python 3.15, breaking async-only KMS-TLS tests on macOS and rhel8. Also remove the temporary [KMS-DEBUG] diagnostics. --- pymongo/network_layer.py | 250 ++++----------------------------------- 1 file changed, 25 insertions(+), 225 deletions(-) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index 8107c77f5b..0160b79af2 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -40,7 +40,7 @@ from pymongo.socket_checker import _errno_from_exception try: - from ssl import SSLError, SSLSocket + from ssl import SSLSocket _HAVE_SSL = True except ImportError: @@ -56,8 +56,6 @@ from pymongo.ssl_support import ( BLOCKING_IO_LOOKUP_ERROR, - BLOCKING_IO_READ_ERROR, - BLOCKING_IO_WRITE_ERROR, ) if TYPE_CHECKING: @@ -71,226 +69,24 @@ BLOCKING_IO_ERRORS = (BlockingIOError, *BLOCKING_IO_LOOKUP_ERROR, *ssl_support.BLOCKING_IO_ERRORS) -def _kms_debug_sock(conn: Any, where: str) -> None: # [KMS-DEBUG] temporary diagnostics - try: - fileno = conn.fileno() - except Exception: - fileno = "?" - try: - peer = conn.getpeername() - except Exception: - peer = "?" - try: - version = conn.version() - cipher = conn.cipher() - except Exception: - version = cipher = "?" - import traceback - - print( # noqa: T201 - f"[KMS-DEBUG] {where} fileno={fileno} peer={peer} version={version!r} cipher={cipher!r} " - f"type={type(conn).__name__}", - file=sys.stderr, - flush=True, - ) - traceback.print_exc(file=sys.stderr) - print("[KMS-DEBUG] ---- end traceback ----", file=sys.stderr, flush=True) # noqa: T201 - - # These socket-based I/O methods are for KMS requests and any other network operations that do not use # the MongoDB wire protocol async def async_socket_sendall(sock: Union[socket.socket, _sslConn], buf: bytes) -> None: timeout = sock.gettimeout() - sock.settimeout(0.0) loop = asyncio.get_running_loop() try: if _HAVE_SSL and isinstance(sock, (SSLSocket, _sslConn)): - await asyncio.wait_for(_async_socket_sendall_ssl(sock, buf, loop), timeout=timeout) + # Drive the SSL socket with a *blocking* operation in a worker thread, + # mirroring synchronous socket behavior. This avoids the hand-rolled + # add_reader/add_writer non-blocking machinery that breaks under + # asyncio on Python 3.15 (a peer reset surfaces as a raw + # ConnectionResetError/BrokenPipeError before any bytes are sent). + await asyncio.wait_for(loop.run_in_executor(None, sock.sendall, buf), timeout=timeout) else: await asyncio.wait_for(loop.sock_sendall(sock, buf), timeout=timeout) # type: ignore[arg-type] except asyncio.TimeoutError as exc: # Convert the asyncio.wait_for timeout error to socket.timeout which pool.py understands. raise socket.timeout("timed out") from exc - finally: - sock.settimeout(timeout) - - -if sys.platform != "win32": - - async def _async_socket_sendall_ssl( - sock: Union[socket.socket, _sslConn], buf: bytes, loop: AbstractEventLoop - ) -> None: - view = memoryview(buf) - sent = 0 - - def _is_ready(fut: Future[Any]) -> None: - if fut.done(): - return - fut.set_result(None) - - # [KMS-DEBUG] temporary diagnostics - try: - _dbg2 = f"fileno={sock.fileno()} type={type(sock).__name__}" - except Exception: - _dbg2 = "fileno=? type=?" - print(f"[KMS-DEBUG] sendall_ssl start len={len(buf)} {_dbg2}", file=sys.stderr, flush=True) # noqa: T201 - try: - _dbg = f"version={sock.version()!r} cipher={sock.cipher()!r}" - except Exception: - _dbg = "version=? cipher=?" - print(f"[KMS-DEBUG] sendall_ssl start len={len(buf)} {_dbg}", file=sys.stderr, flush=True) # noqa: T201 - - while sent < len(buf): - try: - sent += sock.send(view[sent:]) - except BLOCKING_IO_ERRORS as exc: - fd = sock.fileno() - # Check for closed socket. - if fd == -1: - raise SSLError("Underlying socket has been closed") from None - if isinstance(exc, BLOCKING_IO_READ_ERROR): - fut = loop.create_future() - loop.add_reader(fd, _is_ready, fut) - try: - await fut - finally: - loop.remove_reader(fd) - if isinstance(exc, BLOCKING_IO_WRITE_ERROR): - fut = loop.create_future() - loop.add_writer(fd, _is_ready, fut) - try: - await fut - finally: - loop.remove_writer(fd) - if _HAVE_PYOPENSSL and isinstance(exc, BLOCKING_IO_LOOKUP_ERROR): - fut = loop.create_future() - loop.add_reader(fd, _is_ready, fut) - try: - loop.add_writer(fd, _is_ready, fut) - await fut - finally: - loop.remove_reader(fd) - loop.remove_writer(fd) - except Exception as _dbg_exc: - # [KMS-DEBUG] temporary diagnostics - _kms_debug_sock(sock, f"sendall_ssl FAILED sent={sent}/{len(buf)}") - raise - - async def _async_socket_receive_ssl( - conn: _sslConn, length: int, loop: AbstractEventLoop, once: Optional[bool] = False - ) -> memoryview: - mv = memoryview(bytearray(length)) - total_read = 0 - - def _is_ready(fut: Future[Any]) -> None: - if fut.done(): - return - fut.set_result(None) - - # [KMS-DEBUG] temporary diagnostics - try: - _dbg = f"version={conn.version()!r} cipher={conn.cipher()!r} fileno={conn.fileno()} type={type(conn).__name__}" - except Exception: - _dbg = "version=? cipher=? fileno=? type=?" - print( # noqa: T201 - f"[KMS-DEBUG] receive_ssl start length={length} once={once} {_dbg}", - file=sys.stderr, - flush=True, - ) - - while total_read < length: - try: - read = conn.recv_into(mv[total_read:]) - if read == 0: - raise OSError("connection closed") - # KMS responses update their expected size after the first batch, stop reading after one loop - if once: - return mv[:read] - total_read += read - except BLOCKING_IO_ERRORS as exc: - fd = conn.fileno() - # Check for closed socket. - if fd == -1: - raise SSLError("Underlying socket has been closed") from None - if isinstance(exc, BLOCKING_IO_READ_ERROR): - fut = loop.create_future() - loop.add_reader(fd, _is_ready, fut) - try: - await fut - finally: - loop.remove_reader(fd) - if isinstance(exc, BLOCKING_IO_WRITE_ERROR): - fut = loop.create_future() - loop.add_writer(fd, _is_ready, fut) - try: - await fut - finally: - loop.remove_writer(fd) - if _HAVE_PYOPENSSL and isinstance(exc, BLOCKING_IO_LOOKUP_ERROR): - fut = loop.create_future() - loop.add_reader(fd, _is_ready, fut) - try: - loop.add_writer(fd, _is_ready, fut) - await fut - finally: - loop.remove_reader(fd) - loop.remove_writer(fd) - except Exception as _dbg_exc: - # [KMS-DEBUG] temporary diagnostics - _kms_debug_sock(conn, f"receive_ssl FAILED total_read={total_read}/{length}") - raise - return mv - -else: - # The default Windows asyncio event loop does not support loop.add_reader/add_writer: - # https://docs.python.org/3/library/asyncio-platforms.html#asyncio-platform-support - # Note: In PYTHON-4493 we plan to replace this code with asyncio streams. - async def _async_socket_sendall_ssl( - sock: Union[socket.socket, _sslConn], buf: bytes, dummy: AbstractEventLoop - ) -> None: - view = memoryview(buf) - total_length = len(buf) - total_sent = 0 - # Backoff starts at 1ms, doubles on timeout up to 512ms, and halves on success - # down to 1ms. - backoff = 0.001 - while total_sent < total_length: - try: - sent = sock.send(view[total_sent:]) - except BLOCKING_IO_ERRORS: - await asyncio.sleep(backoff) - sent = 0 - if sent > 0: - backoff = max(backoff / 2, 0.001) - else: - backoff = min(backoff * 2, 0.512) - total_sent += sent - - async def _async_socket_receive_ssl( - conn: _sslConn, length: int, dummy: AbstractEventLoop, once: Optional[bool] = False - ) -> memoryview: - mv = memoryview(bytearray(length)) - total_read = 0 - # Backoff starts at 1ms, doubles on timeout up to 512ms, and halves on success - # down to 1ms. - backoff = 0.001 - while total_read < length: - try: - read = conn.recv_into(mv[total_read:]) - if read == 0: - raise OSError("connection closed") - # KMS responses update their expected size after the first batch, stop reading after one loop - if once: - return mv[:read] - except BLOCKING_IO_ERRORS: - await asyncio.sleep(backoff) - read = 0 - if read > 0: - backoff = max(backoff / 2, 0.001) - else: - backoff = min(backoff * 2, 0.512) - total_read += read - return mv def sendall(sock: Union[socket.socket, _sslConn], buf: bytes) -> None: @@ -308,26 +104,30 @@ async def _poll_cancellation(conn: AsyncConnection) -> None: async def async_receive_data_socket( sock: Union[socket.socket, _sslConn], length: int ) -> memoryview: - sock_timeout = sock.gettimeout() - timeout = sock_timeout - - sock.settimeout(0.0) + timeout = sock.gettimeout() loop = asyncio.get_running_loop() try: if _HAVE_SSL and isinstance(sock, (SSLSocket, _sslConn)): - return await asyncio.wait_for( - _async_socket_receive_ssl(sock, length, loop, once=True), # type: ignore[arg-type] - timeout=timeout, - ) - else: - return await asyncio.wait_for( - _async_socket_receive(sock, length, loop), # type: ignore[arg-type] - timeout=timeout, + # Drive the SSL socket with a *blocking* operation in a worker thread, + # mirroring synchronous socket behavior. This avoids the hand-rolled + # add_reader/add_writer non-blocking machinery that breaks under + # asyncio on Python 3.15 (a peer reset surfaces as a raw + # ConnectionResetError/BrokenPipeError before any bytes are read). + mv = memoryview(bytearray(length)) + read = await asyncio.wait_for( + loop.run_in_executor(None, sock.recv_into, mv), timeout=timeout ) + if read == 0: + raise OSError("connection closed") + # KMS responses update their expected size after the first batch, + # so only the first read is needed. + return mv[:read] + return await asyncio.wait_for( + _async_socket_receive(sock, length, loop), # type: ignore[arg-type] + timeout=timeout, + ) except asyncio.TimeoutError as err: raise socket.timeout("timed out") from err - finally: - sock.settimeout(sock_timeout) async def _async_socket_receive( From 5669e4a012bfa4ebaecb18e75f108eb58f35dacd Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 08:48:09 -0500 Subject: [PATCH 25/27] PYTHON-6077 Finish removing KMS-DEBUG diagnostics; harden timeout path Remove the leftover [KMS-DEBUG] block in pool_shared._async_configured_socket. In network_layer, use asyncio.shield around the executor future in _async_blocking_socket_call so wait_for cannot cancel it. On timeout, join the worker (bounded by the socket's own timeout) before propagating, so the caller never closes the SSL socket out from under the worker thread - closing an in-flight SSL socket is racy and not thread-safe. Handle CancelledError from re-awaiting the shielded future, and restore the non-blocking timeout dance for the plain (non-TLS) socket branch. --- pymongo/network_layer.py | 60 ++++++++++++++++++++++++++++++++++------ pymongo/pool_shared.py | 16 ----------- 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index 0160b79af2..2311eea06c 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -27,6 +27,7 @@ from typing import ( TYPE_CHECKING, Any, + Callable, Optional, Union, ) @@ -81,14 +82,52 @@ async def async_socket_sendall(sock: Union[socket.socket, _sslConn], buf: bytes) # add_reader/add_writer non-blocking machinery that breaks under # asyncio on Python 3.15 (a peer reset surfaces as a raw # ConnectionResetError/BrokenPipeError before any bytes are sent). - await asyncio.wait_for(loop.run_in_executor(None, sock.sendall, buf), timeout=timeout) + await _async_blocking_socket_call(loop, sock.sendall, buf, timeout) else: - await asyncio.wait_for(loop.sock_sendall(sock, buf), timeout=timeout) # type: ignore[arg-type] + # loop.sock_sendall requires a non-blocking socket. + sock.settimeout(0.0) + try: + await asyncio.wait_for(loop.sock_sendall(sock, buf), timeout=timeout) # type: ignore[arg-type] + finally: + sock.settimeout(timeout) except asyncio.TimeoutError as exc: # Convert the asyncio.wait_for timeout error to socket.timeout which pool.py understands. raise socket.timeout("timed out") from exc +async def _async_blocking_socket_call( + loop: AbstractEventLoop, + func: Callable[..., Any], + arg: Any, + timeout: Optional[float], +) -> Any: + """Run a blocking socket operation in a worker thread with a timeout. + + The worker thread cannot be interrupted, and the socket is not thread-safe + to close while another thread is blocked inside an SSL operation. So the + future is *shielded* from cancellation: on timeout, wait for the worker to + finish (its blocking op is bounded by the socket's own timeout) before + propagating the timeout to the caller. + """ + fut = asyncio.shield(loop.run_in_executor(None, func, arg)) + try: + return await asyncio.wait_for(fut, timeout=timeout) + except asyncio.TimeoutError: + if timeout is not None: + try: + await asyncio.wait_for(fut, timeout=timeout) + except ( + asyncio.TimeoutError, + asyncio.CancelledError, + OSError, + *ssl_support.BLOCKING_IO_ERRORS, + ): + # The worker finished (in error or via shutdown); its result is + # not needed since we are propagating the timeout. + pass + raise + + def sendall(sock: Union[socket.socket, _sslConn], buf: bytes) -> None: sock.sendall(buf) @@ -114,18 +153,21 @@ async def async_receive_data_socket( # asyncio on Python 3.15 (a peer reset surfaces as a raw # ConnectionResetError/BrokenPipeError before any bytes are read). mv = memoryview(bytearray(length)) - read = await asyncio.wait_for( - loop.run_in_executor(None, sock.recv_into, mv), timeout=timeout - ) + read = await _async_blocking_socket_call(loop, sock.recv_into, mv, timeout) if read == 0: raise OSError("connection closed") # KMS responses update their expected size after the first batch, # so only the first read is needed. return mv[:read] - return await asyncio.wait_for( - _async_socket_receive(sock, length, loop), # type: ignore[arg-type] - timeout=timeout, - ) + # loop.sock_recv_into requires a non-blocking socket. + sock.settimeout(0.0) + try: + return await asyncio.wait_for( + _async_socket_receive(sock, length, loop), # type: ignore[arg-type] + timeout=timeout, + ) + finally: + sock.settimeout(timeout) except asyncio.TimeoutError as err: raise socket.timeout("timed out") from err diff --git a/pymongo/pool_shared.py b/pymongo/pool_shared.py index 95621abbe5..8cd546bda6 100644 --- a/pymongo/pool_shared.py +++ b/pymongo/pool_shared.py @@ -339,22 +339,6 @@ async def _async_configured_socket( # below. raise except (OSError, *SSLErrors) as exc: - # [KMS-DEBUG] temporary diagnostics - try: - import traceback - - try: - _peer = sock.getpeername() - except Exception: - _peer = "?" - print( # noqa: T201 - f"[KMS-DEBUG] connect_ssl FAILED host={host} peer={_peer} exc={type(exc).__name__}: {exc}", - file=sys.stderr, - flush=True, - ) - traceback.print_exc(file=sys.stderr) - except Exception: # noqa: S110 - pass sock.close() # We raise AutoReconnect for transient and permanent SSL handshake # failures alike. Permanent handshake failures, like protocol From c2b07dc2912ef5b826b7c13cb65802fc5cf4b338 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 11:51:48 -0500 Subject: [PATCH 26/27] PYTHON-6077 Treat peer reset as clean close in async KMS SSL I/O On Python 3.15 (OpenSSL 3.x), a peer that resets the connection during async KMS send/recv surfaces as BrokenPipeError/ConnectionResetError, where older Pythons (OpenSSL 1.1.1) surfaced a clean EOF. Map these to OSError("connection closed") in _async_blocking_socket_call so KMS requests treat a reset as a retryable connection failure, matching the behavior on earlier Pythons and the sync path. Fixes the async TestKmsTLSOptions KMIP cases on Python 3.15. --- pymongo/network_layer.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index 2311eea06c..edf6e7df38 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -126,6 +126,13 @@ async def _async_blocking_socket_call( # not needed since we are propagating the timeout. pass raise + except (BrokenPipeError, ConnectionResetError, ConnectionAbortedError) as exc: + # The peer reset the connection. On older Pythons/OpenSSL this surfaces + # as a clean EOF; on Python 3.15's OpenSSL it raises a raw + # BrokenPipeError/ConnectionResetError instead. Map it back to a + # graceful close so KMS requests treat it as a retryable connection + # failure like they do everywhere else. + raise OSError("connection closed") from exc def sendall(sock: Union[socket.socket, _sslConn], buf: bytes) -> None: From ecf80e007257bd10747017fd2229d19e03c7737a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 9 Sep 2026 14:04:59 -0500 Subject: [PATCH 27/27] PYTHON-6077 Use non-blocking SSL I/O for async KMS receives Revert the receive path to the add_reader/add_writer non-blocking machinery: on Python 3.15 + OpenSSL 3.x the blocking recv_into in an executor thread surfaces a peer-close during the read as a raw BrokenPipeError, which libmongocrypt treats as a retryable network failure and every retry fails the same way. The non-blocking path returns 0 bytes (clean EOF) in the same scenario, which the KMS request loop already handles as a connection error. Keep the blocking sendall in an executor thread for the send path: there the non-blocking add_writer machinery fails on Python 3.15 before any bytes are written, while a blocking sendall either completes or fails deterministically. Verified against the CI pykmip server locally: create_data_key with KMIP completes the Register/Activate/Get round trips on 3.15.0rc2. --- pymongo/network_layer.py | 114 ++++++++++++++++++++++++++++++++------- 1 file changed, 96 insertions(+), 18 deletions(-) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index edf6e7df38..ebee3b5be5 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -41,7 +41,7 @@ from pymongo.socket_checker import _errno_from_exception try: - from ssl import SSLSocket + from ssl import SSLError, SSLSocket _HAVE_SSL = True except ImportError: @@ -57,6 +57,8 @@ from pymongo.ssl_support import ( BLOCKING_IO_LOOKUP_ERROR, + BLOCKING_IO_READ_ERROR, + BLOCKING_IO_WRITE_ERROR, ) if TYPE_CHECKING: @@ -151,32 +153,23 @@ async def async_receive_data_socket( sock: Union[socket.socket, _sslConn], length: int ) -> memoryview: timeout = sock.gettimeout() + sock.settimeout(0.0) loop = asyncio.get_running_loop() try: if _HAVE_SSL and isinstance(sock, (SSLSocket, _sslConn)): - # Drive the SSL socket with a *blocking* operation in a worker thread, - # mirroring synchronous socket behavior. This avoids the hand-rolled - # add_reader/add_writer non-blocking machinery that breaks under - # asyncio on Python 3.15 (a peer reset surfaces as a raw - # ConnectionResetError/BrokenPipeError before any bytes are read). - mv = memoryview(bytearray(length)) - read = await _async_blocking_socket_call(loop, sock.recv_into, mv, timeout) - if read == 0: - raise OSError("connection closed") - # KMS responses update their expected size after the first batch, - # so only the first read is needed. - return mv[:read] - # loop.sock_recv_into requires a non-blocking socket. - sock.settimeout(0.0) - try: + return await asyncio.wait_for( + _async_socket_receive_ssl(sock, length, loop, once=True), # type: ignore[arg-type] + timeout=timeout, + ) + else: return await asyncio.wait_for( _async_socket_receive(sock, length, loop), # type: ignore[arg-type] timeout=timeout, ) - finally: - sock.settimeout(timeout) except asyncio.TimeoutError as err: raise socket.timeout("timed out") from err + finally: + sock.settimeout(timeout) async def _async_socket_receive( @@ -192,6 +185,91 @@ async def _async_socket_receive( return mv +if sys.platform != "win32": + + async def _async_socket_receive_ssl( + conn: _sslConn, length: int, loop: AbstractEventLoop, once: Optional[bool] = False + ) -> memoryview: + mv = memoryview(bytearray(length)) + total_read = 0 + + def _is_ready(fut: Future[Any]) -> None: + if fut.done(): + return + fut.set_result(None) + + while total_read < length: + try: + read = conn.recv_into(mv[total_read:]) + if read == 0: + raise OSError("connection closed") + # KMS responses update their expected size after the first batch, + # stop reading after one loop. + if once: + return mv[:read] + total_read += read + except BLOCKING_IO_ERRORS as exc: + fd = conn.fileno() + # Check for closed socket. + if fd == -1: + raise SSLError("Underlying socket has been closed") from None + if isinstance(exc, BLOCKING_IO_READ_ERROR): + fut = loop.create_future() + loop.add_reader(fd, _is_ready, fut) + try: + await fut + finally: + loop.remove_reader(fd) + if isinstance(exc, BLOCKING_IO_WRITE_ERROR): + fut = loop.create_future() + loop.add_writer(fd, _is_ready, fut) + try: + await fut + finally: + loop.remove_writer(fd) + if _HAVE_PYOPENSSL and isinstance(exc, BLOCKING_IO_LOOKUP_ERROR): + fut = loop.create_future() + loop.add_reader(fd, _is_ready, fut) + try: + loop.add_writer(fd, _is_ready, fut) + await fut + finally: + loop.remove_reader(fd) + loop.remove_writer(fd) + return mv + +else: + # The default Windows asyncio event loop does not support + # loop.add_reader/add_writer: + # https://docs.python.org/3/library/asyncio-platforms.html#asyncio-platform-support + async def _async_socket_receive_ssl( + conn: _sslConn, length: int, dummy: AbstractEventLoop, once: Optional[bool] = False + ) -> memoryview: + mv = memoryview(bytearray(length)) + total_read = 0 + # Backoff starts at 1ms, doubles on timeout up to 512ms, and halves on success + # down to 1ms. + backoff = 0.001 + while total_read < length: + try: + read = conn.recv_into(mv[total_read:]) + if read == 0: + raise OSError("connection closed") + # KMS responses update their expected size after the first batch, + # stop reading after one loop. + if once: + return mv[:read] + except BLOCKING_IO_ERRORS: + await asyncio.sleep(backoff) + read = 0 + if read > 0: + backoff = max(backoff / 2, 0.001) + else: + backoff = min(backoff * 2, 0.512) + total_read += read + return mv + + _PYPY = "PyPy" in sys.version _WINDOWS = sys.platform == "win32"