Skip to content

ci: smoke-test musl wheels in Alpine, then publish them#150

Merged
rahlk merged 1 commit into
146-package-codeanalyzer-java-as-a-pypi-distribution-with-pypi-releaseymlfrom
fix/pypi-musl-alpine-smoke
Jun 8, 2026
Merged

ci: smoke-test musl wheels in Alpine, then publish them#150
rahlk merged 1 commit into
146-package-codeanalyzer-java-as-a-pypi-distribution-with-pypi-releaseymlfrom
fix/pypi-musl-alpine-smoke

Conversation

@rahlk

@rahlk rahlk commented Jun 8, 2026

Copy link
Copy Markdown
Collaborator

Completes musl support for the v2.3.7 PyPI release. Builds were already fixed (#148 download, #149 static-PIE link); musl wheels now build but weren't validated or published.

Problem

A musllinux wheel can't be pip installed on the glibc manylinux build host, and that job runs inside a container (no docker-in-docker), so the wheel can't be tested where it's built.

Stage-then-promote

  • build-wheels: musl wheels upload to a musl-staging-* artifact and skip the in-job smoke (can't run on glibc).
  • smoke-musl (new): per-arch native runners install + exercise each wheel inside a python:3.12-alpine (musl) container via docker (codajv --version and a level-1 -s analysis). Only on success does it promote the wheel to the publishable wheel-* name — so an unverified musl wheel never reaches PyPI.
  • publish/release: download wheel-* (+ sdist) only, never staging; they needs: smoke-musl for ordering but gate solely on the essential build jobs (always() + result checks), so the experimental musl leg can never block the glibc/macOS release.

After merge I'll re-tag v2.3.7 once more to publish the two musl wheels (PyPI publish is skip-existing, so the already-live wheels/sdist are untouched).

🤖 Generated with Claude Code

The musl wheels build cleanly now but couldn't be validated: a musllinux
wheel can't be pip-installed on the glibc manylinux build host, and the
build runs inside a container so docker-in-docker isn't available.

Add a stage-then-promote flow:
- build-wheels uploads musl wheels under a 'musl-staging-*' artifact and
  skips the in-job smoke (it physically can't run on glibc).
- A new 'smoke-musl' job runs per-arch on native host runners, installs
  and exercises each wheel inside a python:3.12-alpine (musl) container
  via docker, and only on success promotes it to the publishable
  'wheel-*' name. So an unverified musl wheel never reaches PyPI.
- github-release / publish-pypi / publish-testpypi now pull 'wheel-*'
  (+ sdist) only — never the staging artifacts — and wait for smoke-musl
  via needs, but are gated solely on the essential build jobs (always()
  + result checks) so the experimental musl leg can never block release.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rahlk rahlk merged commit 68d7d8e into 146-package-codeanalyzer-java-as-a-pypi-distribution-with-pypi-releaseyml Jun 8, 2026
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