Skip to content

Commit 5b0a94f

Browse files
committed
ci(release-readiness): add multi-Python install/verify matrix (3.10–3.13)
Exercises the abi3 promise end-to-end: the published cp310-abi3 wheel must install and load the Rust extension on every Python version we claim to support. Previously only Python 3.12 was tested via install-tests; 3.10, 3.11, and 3.13 were entirely unexercised against the published wheel. New job `multi-python-install-verify` runs after `install-tests`, downloads the latest dev wheel from Artifact Registry, installs it on each Python version, and verifies that `import pinecone`, `import pinecone._grpc`, and `GrpcChannel()` all succeed (lazy constructor, no network required).
1 parent 3dc976d commit 5b0a94f

1 file changed

Lines changed: 63 additions & 1 deletion

File tree

‎.github/workflows/release-readiness.yml‎

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,66 @@ jobs:
160160
name: install-smoke-results
161161
path: install-smoke-results.xml
162162

163+
# ---------------------------------------------------------------------------
164+
# Multi-Python install verify: exercises the abi3 promise on every supported
165+
# Python version (3.10–3.13). The published wheel is cp310-abi3, so it must
166+
# install and load the Rust extension on each Python we claim to support.
167+
# ---------------------------------------------------------------------------
168+
multi-python-install-verify:
169+
name: Multi-Python install verify (py${{ matrix.python-version }})
170+
runs-on: ubuntu-latest
171+
timeout-minutes: 15
172+
permissions:
173+
contents: read
174+
id-token: write
175+
strategy:
176+
fail-fast: false
177+
matrix:
178+
python-version: ["3.10", "3.11", "3.12", "3.13"]
179+
env:
180+
GCP_REGION: ${{ vars.GCP_REGION }}
181+
GCP_PROJECT_ID: ${{ vars.GCP_PROJECT_ID }}
182+
GCP_REPO_NAME: ${{ vars.GCP_REPO_NAME }}
183+
steps:
184+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
185+
- name: Authenticate to Google Cloud
186+
uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
187+
with:
188+
workload_identity_provider: ${{ vars.GCP_WORKLOAD_IDENTITY_PROVIDER }}
189+
service_account: ${{ vars.GCP_SERVICE_ACCOUNT }}
190+
- name: Set up Python ${{ matrix.python-version }}
191+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
192+
with:
193+
python-version: ${{ matrix.python-version }}
194+
- name: Install AR keyring backend
195+
run: |
196+
python -m pip install --upgrade pip
197+
pip install keyring==25.6.0 keyrings.google-artifactregistry-auth==1.1.2
198+
- name: Install latest dev wheel from Artifact Registry
199+
run: |
200+
set -euo pipefail
201+
INDEX_URL="https://${GCP_REGION}-python.pkg.dev/${GCP_PROJECT_ID}/${GCP_REPO_NAME}/simple/"
202+
pip install --pre --extra-index-url "${INDEX_URL}" pinecone
203+
- name: Show installed version + Python
204+
run: |
205+
python -V
206+
pip show pinecone | grep -E '^(Name|Version|Location):'
207+
- name: Verify import + Rust extension on this Python version
208+
run: |
209+
python -c "
210+
import pinecone
211+
print('OK: import pinecone on Python', __import__('sys').version_info[:2])
212+
import pinecone._grpc
213+
print('OK: import pinecone._grpc')
214+
ch = pinecone._grpc.GrpcChannel(
215+
endpoint='https://example.invalid:443',
216+
api_key='test',
217+
api_version='2025-10',
218+
version='0.0.0',
219+
)
220+
print('OK: GrpcChannel constructed:', type(ch).__name__)
221+
"
222+
163223
# ---------------------------------------------------------------------------
164224
# Cross-platform wheel build matrix without injecting dev versions or
165225
# publishing. Independent signal that release-builds work on every target.
@@ -374,11 +434,12 @@ jobs:
374434
notify-failure:
375435
name: Notify on release-readiness regression
376436
runs-on: ubuntu-latest
377-
needs: [integration-tests, install-tests, cross-platform-build, doc-build]
437+
needs: [integration-tests, install-tests, multi-python-install-verify, cross-platform-build, doc-build]
378438
if: >-
379439
always() &&
380440
(needs.integration-tests.result == 'failure' ||
381441
needs.install-tests.result == 'failure' ||
442+
needs.multi-python-install-verify.result == 'failure' ||
382443
needs.cross-platform-build.result == 'failure' ||
383444
needs.doc-build.result == 'failure')
384445
permissions:
@@ -401,6 +462,7 @@ jobs:
401462
"|-----|--------|" \
402463
"| integration-tests | ${{ needs.integration-tests.result }} |" \
403464
"| install-tests | ${{ needs.install-tests.result }} |" \
465+
"| multi-python-install-verify | ${{ needs.multi-python-install-verify.result }} |" \
404466
"| cross-platform-build | ${{ needs.cross-platform-build.result }} |" \
405467
"| doc-build | ${{ needs.doc-build.result }} |" \
406468
"" \

0 commit comments

Comments
 (0)