Skip to content

Commit cde3834

Browse files
JuliaEdomclaude
andcommitted
build(release): stop building releases with a yanked builder
Every `uv lock` in this repo prints: warning: `build==1.5.1` is yanked (reason: "Considers breaking changes, will discuss re-releasing as a new major version.") It is easy to read past, because nothing fails. A yanked release still installs when it is pinned exactly, and build 1.5.1 was pinned in two places: uv.lock, which produces the wheels python-compat smoke-tests, and publish-pypi.yml, which produces the artifacts that go to PyPI. So the warning was not cosmetic -- it said the release path runs on a version upstream has withdrawn, and would keep saying so until someone looked. Both move to 1.6.0, the supported successor. Keeping them together matters: a release built by a different builder than the one CI exercises is the kind of difference that only shows up in the published artifact. tests/unit/test_publish_workflows.py asserts the exact install command, so it moves too, and the workflow now carries the reason inline. requirements-docker.lock is unchanged -- build is a `dev` dependency and the cloud/postgres export does not include it. Verified locally with build 1.6.0 installed: both wheels build the way python-compat builds them (`python -m build --wheel --no-isolation` for the runtime and for sdk/, agentflow_runtime-2.1.0 and agentflow_client-2.1.0), scripts/wheel_smoke.py reports "top-level policy OK", `uv lock --check` passes (256 packages) and prints no yank warning, `uv export` leaves requirements-docker.lock untouched, and test_publish_workflows.py passes (5 passed). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018ybRVCaL1Lyd9d5kFTndh3
1 parent 5839a7f commit cde3834

4 files changed

Lines changed: 25 additions & 5 deletions

File tree

‎.github/workflows/publish-pypi.yml‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,14 @@ jobs:
7979
env.write(f"IS_RC={str('-rc' in release_version).lower()}\n")
8080
PY
8181
82+
# build 1.5.1 was yanked upstream ("considers breaking changes, will
83+
# discuss re-releasing as a new major version"). A yanked release still
84+
# installs when pinned exactly, so this kept working -- it just meant
85+
# every published artifact came out of a withdrawn builder. 1.6.0 is the
86+
# supported successor; uv.lock carries the same version for the wheels
87+
# CI builds in python-compat.
8288
- name: Install build tooling
83-
run: python -m pip install --upgrade build==1.5.1 twine==6.2.0
89+
run: python -m pip install --upgrade build==1.6.0 twine==6.2.0
8490

8591
- name: Clean previous distributions
8692
run: rm -rf dist sdk/dist

‎CHANGELOG.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@ All notable changes to AgentFlow are documented in this file.
44

55
## [Unreleased]
66

7+
### Supply chain — releases were being built by a yanked builder
8+
9+
* **`build` 1.5.1 is yanked upstream** ("considers breaking changes, will
10+
discuss re-releasing as a new major version"), and it was pinned in two
11+
places: `uv.lock`, which builds the wheels CI smoke-tests in
12+
`python-compat`, and `.github/workflows/publish-pypi.yml`, which builds the
13+
artifacts that go to PyPI. A yanked release still installs when pinned
14+
exactly, so nothing failed — every `uv lock` just printed the warning and
15+
every release came out of a withdrawn builder.
16+
* **Both now use 1.6.0**, the supported successor. `requirements-docker.lock`
17+
is unchanged (`build` is a `dev` dependency, not part of the
18+
cloud/postgres export), and `tests/unit/test_publish_workflows.py` pins the
19+
new command so the two cannot drift apart.
20+
721
### Dependencies — the two version ceilings that keep coming back are now explained
822

923
* **`mcp<2` is load-bearing.** mcp 2.x's lowlevel `Server` no longer defines

‎tests/unit/test_publish_workflows.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def test_python_publish_checks_artifacts_with_pinned_tooling_before_upload():
121121
names = [step.get("name") for step in steps if isinstance(step, dict)]
122122
commands = _step_commands(workflow)
123123

124-
assert "python -m pip install --upgrade build==1.5.1 twine==6.2.0" in commands
124+
assert "python -m pip install --upgrade build==1.6.0 twine==6.2.0" in commands
125125
assert "python scripts/check_release_artifacts.py dist/* sdk/dist/*" in commands
126126
assert names.index("Reject unsafe release artifacts") < names.index(
127127
"Dry-run build and twine check"

‎uv.lock‎

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)