Repository navigation
fix(ci): make abi3audit step OS-aware (fix Windows wheel-build job) - #655
Merged
Merged
Conversation
Use RUNNER_TEMP instead of /tmp for the venv parent, and detect Scripts/ (Windows) vs bin/ (Linux/macOS) for the binary directory. Fixes exit code 127 on x86_64-pc-windows-msvc runners where Git Bash maps /tmp to a different path than RUNNER_TEMP, and Windows venvs place binaries in Scripts/ not bin/. Closes CI-0060.
jhamon
added a commit
that referenced
this pull request
Oct 7, 2026
…ci-49c4e6 ci(docs): fail the build when a published documentation URL disappears
jhamon
added a commit
that referenced
this pull request
Oct 7, 2026
…writing The site publishes into one mutable directory: each release's build replaces sdk-docs/python/ wholesale, so a retired layout's pages are deleted rather than kept. sdk-docs' own history is therefore the record of every URL the site has served. Across 63 Python builds it has served 342; 145 resolve today. 197 are dead. 14 are viewcode listings, which redirects cannot cover because they are not Sphinx documents. The other 183 are content pages, and 180 of them come from the pdoc generation (v3.0-v7.0), which named a page after each module path. Two commits did most of the damage, both by adding __all__ to a package __init__: pdoc filters submodules through it, so v5.4.0 deleted the nine pinecone/grpc/* pages and v7.0.0 took the tree from 84 pages to 2. v4 never published docs at all -- the workflow had no caller then -- so its URLs are v3.2.2's, and rebuilding v4.0.0 confirms an identical page set. Targets are not guesses. A page goes to the page its documented symbol lives on today, checked against an index of every anchor in the current build; failing that, to the page for a subject the docs still cover; failing that, to index.html, which is honest about there being no counterpart rather than stranding the reader somewhere plausible-looking. 97 of the 183 land there. The stub template needed three fixes for any of this to work: Its anchor remap was gated on the target starting with the literal "reference/", which is only true for a stub at the docs root. Every entry added here is nested, so the remap would have silently done nothing for all of them. The stub now reads the "../" prefix off its own target and reuses it. The remap mapped renamed classes, but 10.0's change was moving control-plane verbs onto sub-resources, which renames the member too. rest.html's where it does not exist; it is Indexes.create now. One member map covers the sync, asyncio and gRPC clients, which split identically. grpc.html#pineconegrpc forwarded into reference/grpc.html, which stopped documenting PineconeGRPC when it merged into Pinecone -- a redirect landing on a page about something else. That and 20 further section anchors, verified present in the v8 build and mapped to ids verified present in this one, are now in the sections table. check_redirect_anchors.py guards the tables: every page they name must exist, every fragment must be an id on the page it is paired with. This failure mode is invisible otherwise, since the browser loads the page and just does not scroll. It validates the entries present; it cannot know an anchor is missing one it ought to have. published-urls.txt grows by the 183 new stubs via --update, per #655.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/tmp/abi3audit-venv/bin/...paths with OS-aware equivalents$RUNNER_TEMPinstead of/tmpfor the venv parent (works on all runner OSes)Scripts/(Windows) vsbin/(Linux/macOS) for the binary directoryx86_64-pc-windows-msvcrunners (CI-0060)Root cause
The
abi3auditstep (lines 416–422) hardcoded Unix-style paths. On Windows runners:/tmpto a runner-specificAppData/Local/Temppath, notRUNNER_TEMPScripts/, notbin/This combination caused "No such file or directory" / exit 127 on every Windows wheel build.
Verification
Release Readiness run on this branch with
skip_integration=true:https://github.com/pinecone-io/python-sdk/actions/runs/25521225781
All wheel build jobs green, including
Wheel build (x86_64-pc-windows-msvc). CI-0037's isolation intent (separate venv for abi3audit) is preserved.Note
Low Risk
Low risk workflow tweak that only changes how the
abi3auditvirtualenv is created/invoked; main risk is CI regressions if path detection or$RUNNER_TEMPbehaves unexpectedly on some runners.Overview
Fixes the
release-readinesswheel-build job’sabi3auditstep to work cross-platform by creating the venv underRUNNER_TEMPand selectingScripts/(Windows) vsbin/(Unix) when invokingpip/python.This removes hardcoded
/tmp/.../bin/...paths, preventing Windows wheel builds from failing with missing executable/path errors while preserving the venv isolation intent.Reviewed by Cursor Bugbot for commit 1747670. Bugbot is set up for automated code reviews on this repo. Configure here.