mirror of
https://github.com/harvard-edge/cs249r_book.git
synced 2026-05-07 10:08:50 -05:00
[PR #1523] [MERGED] ci(mlsysim): harden PyPI publish — matrix tests, post-publish verify, attestations #9189
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/harvard-edge/cs249r_book/pull/1523
Author: @profvjreddi
Created: 4/24/2026
Status: ✅ Merged
Merged: 4/24/2026
Merged by: @profvjreddi
Base:
dev← Head:feat/mlsysim-pypi-hardening📝 Commits (1)
ac54472ci(mlsysim): harden PyPI workflow — matrix tests, post-publish verify, attestations📊 Changes
2 files changed (+102 additions, -18 deletions)
View changed files
📝
.github/workflows/mlsysim-pypi-publish.yml(+92 -14)📝
mlsysim/RELEASE.md(+10 -4)📄 Description
Summary
Three small, high-value additions to the mlsysim PyPI publish pipeline. No user-facing behavior change; the release-engineer-facing behavior becomes stricter and safer.
What changes
1. Python version matrix on the `test` stage
Tests now run in parallel on Python 3.10, 3.11, 3.12, and 3.13 — every version claimed in `pyproject.toml` classifiers. Catches "works on my Python, breaks on theirs" bugs before the wheel ships. Zero wall-clock cost (parallel fan-out); four jobs finish in ~the same time as the old single job.
`fail-fast: false` so one failing version doesn't mask the others — we see all failures at once.
2. New `verify-pypi` job (post-publish smoke)
Runs after `publish-pypi`. The existing pre-publish tests validate the local wheel; this one validates the remote wheel that PyPI is actually serving to users:
Closes the narrow-but-real failure class between "upload accepted" and "user `pip install` works": CDN issues, metadata rendering, platform tags.
3. Explicit `attestations: true` on the upload
`pypa/gh-action-pypi-publish` generates PEP 740 attestations by default with OIDC, but setting it explicitly makes the intent obvious and future-proofs against default changes. Records cryptographic provenance ("this wheel was built by this exact workflow run from this exact commit"), viewable on the PyPI project page.
Pipeline stages, before and after
Before (6 stages):
After (7 stages):
Test plan
Risk
Low. Workflow-only change; does not touch package code or user-facing metadata. Failure mode of the new `verify-pypi` job is "fails loud, release is still on PyPI" — the release succeeds, verification notices a problem. This is strictly additive visibility.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.