Skip to content

fix(ci): make abi3audit step OS-aware (fix Windows wheel-build job) - #655

Merged
jhamon merged 1 commit into
mainfrom
ci/fix-abi3audit-windows
May 8, 2026
Merged

jhamon merged 1 commit into
mainfrom
ci/fix-abi3audit-windows

Conversation

@jhamon

@jhamon jhamon commented May 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Replaces hardcoded /tmp/abi3audit-venv/bin/... paths with OS-aware equivalents
  • Uses $RUNNER_TEMP instead of /tmp for the venv parent (works on all runner OSes)
  • Detects Scripts/ (Windows) vs bin/ (Linux/macOS) for the binary directory
  • Fixes exit code 127 failure on x86_64-pc-windows-msvc runners (CI-0060)

Root cause

The abi3audit step (lines 416–422) hardcoded Unix-style paths. On Windows runners:

  1. Git Bash maps /tmp to a runner-specific AppData/Local/Temp path, not RUNNER_TEMP
  2. Windows venvs place binaries in Scripts/, not bin/

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 abi3audit virtualenv is created/invoked; main risk is CI regressions if path detection or $RUNNER_TEMP behaves unexpectedly on some runners.

Overview
Fixes the release-readiness wheel-build job’s abi3audit step to work cross-platform by creating the venv under RUNNER_TEMP and selecting Scripts/ (Windows) vs bin/ (Unix) when invoking pip/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.

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
jhamon merged commit 564ce75 into main May 8, 2026
29 checks passed
@jhamon
jhamon deleted the ci/fix-abi3audit-windows branch May 8, 2026 15:57
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant