diff --git a/.forgejo/workflows/wheelhouse.yml b/.forgejo/workflows/wheelhouse.yml index 7684732..717c2e0 100644 --- a/.forgejo/workflows/wheelhouse.yml +++ b/.forgejo/workflows/wheelhouse.yml @@ -116,5 +116,22 @@ jobs: # secret if you tighten the default token permissions. TWINE_PASSWORD: ${{ secrets.WHEELHOUSE_TOKEN || secrets.GITHUB_TOKEN }} run: | - # --skip-existing keeps re-runs idempotent should a version collide. - uvx twine upload --non-interactive --skip-existing dist/* + set -euo pipefail + # twine's --skip-existing only works for PyPI/TestPyPI, not custom + # repositories, so we upload wheel-by-wheel and treat an + # "already exists" (HTTP 409) response as a skip to stay idempotent. + for whl in dist/*.whl ; do + echo "::group::Uploading $(basename "$whl")" + if out="$(uvx twine upload --non-interactive --disable-progress-bar "$whl" 2>&1)" ; then + echo "$out" + else + echo "$out" + if echo "$out" | grep -qiE "409|already exist|conflict" ; then + echo "Version already published, skipping." + else + echo "::endgroup::" + exit 1 + fi + fi + echo "::endgroup::" + done