Skip to content

ci: stop TestPyPI supplying third-party dependencies - #38

Merged
harshuljain13 merged 1 commit into
mainfrom
fix/testpypi-resolution
Sep 7, 2026
Merged

ci: stop TestPyPI supplying third-party dependencies#38
harshuljain13 merged 1 commit into
mainfrom
fix/testpypi-resolution

Conversation

@harshuljain13

Copy link
Copy Markdown
Collaborator

The v0.0.2 release failed at the install-back-out gate, after TestPyPI had published
and before PyPI ran β€” so 0.0.2 is still unpublished on PyPI and nothing bad shipped.

ERROR: Failed to build 'fastapi'
FileNotFoundError: [Errno 2] No such file or directory: 'DESCRIPTION.txt'

Nothing to do with our packages. TestPyPI is a sandbox anyone may upload to, and its
fastapi is a decade-old placeholder whose sdist cannot be built. It also out-numbers the
real one, so pip prefers it. The old flags made TestPyPI the primary index, and the
comment above them described the opposite of what the code did.

Swapping the indexes is not enough β€” I checked before committing; the junk version is
higher, so it wins from either position. It needs both:

  • --index-url https://pypi.org/simple/ β€” dependencies come from where they live; TestPyPI
    is consulted only for names PyPI lacks, which is exactly our six at an unreleased version
  • --only-binary :all: β€” refuses sdists; the junk is source-only, real dependencies ship
    wheels, ours are pure-Python wheels

Verified against the real thing, not a simulation

Against the 0.0.2 already on TestPyPI:

result
old flags reproduces the fastapi failure
new flags installs all six at 0.0.2
starter shape no observability adapter present
quickstart, keyless echo: hi there

The published artifact is fine β€” only the gate in front of it was broken.

After merge, v0.0.2 moves to this commit and re-runs. TestPyPI already has 0.0.2;
skip-existing: true covers the re-upload.

The v0.0.2 release failed after TestPyPI had already published: the install-back-out check
died on `Failed to build 'fastapi'` / `FileNotFoundError: DESCRIPTION.txt`. Nothing to do
with our packages.

TestPyPI is a sandbox anyone may upload to, so it carries junk copies of common names. Its
`fastapi` is a decade-old placeholder whose sdist cannot be built -- and it out-numbers the
real one, so pip prefers it. The old flags made TestPyPI the PRIMARY index, which invited
that, and the comment above them claimed the opposite of what the code did.

Swapping the indexes alone does not fix it, which I checked before committing: the junk
version is higher, so it wins from either position. It takes both flags. Real PyPI primary,
so dependencies come from where they live and TestPyPI is consulted only for names PyPI
does not have -- exactly our six at an unreleased version. Plus --only-binary :all:, which
refuses sdists: the junk is source-only, every real dependency ships wheels, and ours are
pure-Python wheels.

Verified against the 0.0.2 that is already on TestPyPI, not a simulation: the old flags
reproduce the fastapi failure, the new ones install all six at 0.0.2, and the starter shape
(no observability adapter) runs the quickstart -- `echo: hi there`. So the artifact that is
already published is good; only the gate in front of it was broken.

PyPI never ran, so 0.0.2 is still unpublished there and the tag can move.
@harshuljain13
harshuljain13 merged commit 62da5ae into main Sep 7, 2026
4 checks passed
@harshuljain13
harshuljain13 deleted the fix/testpypi-resolution branch September 7, 2026 20:23
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