From 7bbbb72c26d459be816651e151b61a278b4930c1 Mon Sep 17 00:00:00 2001 From: Anatolii Date: Fri, 3 Jul 2026 19:06:41 +0400 Subject: [PATCH] =?UTF-8?q?fix(build):=20align=20pyproject.toml=20version?= =?UTF-8?q?=20with=20=5F=5Fversion=5F=5F.py=20(0.11.0=20=E2=86=92=200.12.0?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `feat(sdk)` commit (79a6e7e, PR #49) bumped `src/nullrun/__version__.py` to 0.12.0 but left `version` in `pyproject.toml` at 0.11.0. Hatchling uses `pyproject.toml`'s version, so `python -m build` was producing a wheel named `nullrun-0.11.0-py3-none-any.whl` — same name as the 0.11.0 artifact that `publish-test` had already uploaded to TestPyPI on its previous successful run (commit 18a91e2). TestPyPI rejects re-uploads of the same wheel hash with HTTP 400 "File already exists" (no overwrite semantics), so the `publish-test` workflow failed at the very last step. Verify locally: $ python -m build --wheel Successfully built nullrun-0.12.0-py3-none-any.whl Also adds `skip-existing: true` to the `pypa/gh-action-pypi-publish` step so a re-run of the same SHA becomes a no-op (matching twine's --skip-existing). Production PyPI cannot overwrite anyway, so this flag is harmless there too. --- .github/workflows/publish-test.yml | 8 +++++++- pyproject.toml | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-test.yml b/.github/workflows/publish-test.yml index 12e650b..299c773 100644 --- a/.github/workflows/publish-test.yml +++ b/.github/workflows/publish-test.yml @@ -56,4 +56,10 @@ jobs: - name: Publish to TestPyPI (Trusted Publishing) uses: pypa/gh-action-pypi-publish@release/v1 with: - repository-url: https://test.pypi.org/legacy/ \ No newline at end of file + repository-url: https://test.pypi.org/legacy/ + # TestPyPI rejects re-uploads of the same wheel hash with + # HTTP 400 "File already exists". `skip-existing` makes + # re-runs of the same SHA a no-op (matching twine's + # --skip-existing behaviour). Production PyPI cannot + # overwrite anyway, so this flag is harmless there too. + skip-existing: true \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 20b1e9d..9402dac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,14 @@ build-backend = "hatchling.build" [project] name = "nullrun" -version = "0.11.0" +# Version bump: 0.11.0 → 0.12.0 in `feat(sdk)` (server-minted +# execution_id default + capability probe). The previous commit +# updated `src/nullrun/__version__.py` but missed this field, so +# `python -m build` was producing a wheel named `nullrun-0.11.0-*` +# that collided with the 0.11.0 artifact already on TestPyPI +# (causing the publish-test workflow to fail with HTTP 400 +# "File already exists"). +version = "0.12.0" # Long form used by PyPI page meta-description and search snippets. # Kept under the 200-char preview threshold so the full line is visible # without an "expand" click. Keywords are matched against likely search