Skip to content

ci: gate releases on the py_vollib differential, drop the nightly cron#24

Merged
yipjunkai merged 1 commit into
mainfrom
ci/differential-release-gate
Jun 11, 2026
Merged

ci: gate releases on the py_vollib differential, drop the nightly cron#24
yipjunkai merged 1 commit into
mainfrom
ci/differential-release-gate

Conversation

@yipjunkai

Copy link
Copy Markdown
Owner

What

Wires the py_vollib differential (20,448 cases) into the release path as a hard gate, and drops the now-redundant nightly cron.

Why

The differential backs pyvolr's headline "matches py_vollib" claim but gated nothing — it ran on schedule (nightly) + workflow_dispatch only, while merge-to-PyPI is ~1 day, so a compat regression could reach PyPI unnoticed. And the nightly was mostly wasted: pyvolr's outputs only move on our own commits and py_vollib is abandoned (frozen), so a nightly recomputed a bit-identical green ~365×/year. (It was also the lone CI stack installing unpinned, against #16's "lockfiles govern CI" line.)

Changes

  • differential.yml: + workflow_call (reusable), - schedule. workflow_dispatch kept for manual runs.
  • release.yml: new differential job that calls the reusable workflow, added to publish-pypi's needs. Runs in parallel with the wheel builds, so no added wall-clock on a green release — but no wheel reaches PyPI unless the differential passes.

Gate semantics

publish-pypineeds: [build-sdist, build-wheels, differential]. If the differential fails at tag time, publish-pypi is skipped → create-release (which needs it) is skipped → nothing publishes. No branch-protection change needed — it's a workflow-internal dependency.

Deferred (deliberately minimal, per maintainer call)

  • No PR-path trigger — the differential runs at release + on demand, not on every compat/core PR.
  • No pinning of the unpinned py_vollib reference. If you later want a fully reproducible gate, pin the 3.10 reference stack.

Verification

  • actionlint clean locally (validates the reusable-workflow uses: + needs: references) — the same linter ci.yml runs.
  • Dispatched differential.yml on this branch to confirm the reusable refactor still runs green (see Actions).
  • Touches workflows (not .md), so ci.yml runs and ci-passed reports — normally mergeable.

🤖 Generated with Claude Code

The differential (compat shim vs py_vollib, 20,448 cases) backs pyvolr's
headline "matches reference" claim but gated nothing: it ran only on a nightly
cron + workflow_dispatch, while merge-to-PyPI is ~1 day. A compat regression
could reach PyPI unnoticed.

- differential.yml: add `workflow_call` (reusable) and drop the `schedule` cron.
  pyvolr's outputs only move on our own commits and py_vollib is abandoned
  (frozen), so a nightly run just recomputed an identical result -- the signal
  that matters is "are we about to publish something that no longer matches?",
  which is the release gate, not the clock. workflow_dispatch is kept for manual
  runs.
- release.yml: add a `differential` job that calls the reusable workflow and add
  it to publish-pypi's `needs`. Wheels cannot reach PyPI unless the differential
  passes; it runs in parallel with the wheel builds, so no added wall-clock on a
  green release.

Deliberately minimal (maintainer call): no PR-path trigger and no pinning of the
unpinned py_vollib reference -- both deferred. Verified with actionlint
(reusable-call + needs references resolve clean).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@yipjunkai
yipjunkai merged commit 4d11e66 into main Jun 11, 2026
25 checks passed
@yipjunkai
yipjunkai deleted the ci/differential-release-gate branch June 11, 2026 05:57
yipjunkai added a commit that referenced this pull request Jun 11, 2026
#24 dropped the differential's nightly schedule and wired it into the release
path (publish-pypi needs the differential job), so the Sustainability bullet's
"Nightly differential tests ... to catch numerical drift" was stale. Reframe it
as the release gate it now is.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
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