From d76c8f87a8f8bb3cbc76eac12d1d4741a59219b3 Mon Sep 17 00:00:00 2001 From: Latte Date: Sat, 27 Jun 2026 17:57:50 +0200 Subject: [PATCH] ci: drop unsupported --skip-existing from twine upload Gitea's PyPI registry rejects twine's --skip-existing flag (UnsupportedConfiguration), which failed every publish run. Remove it and instead tolerate an "already exists" conflict in the shell, so dev (unique .devN versions) always publishes and a main re-run of an existing release is treated as success rather than a hard failure. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitea/workflows/ci.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 4fb9861..53c580d 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -74,8 +74,20 @@ jobs: TWINE_USERNAME: ${{ github.actor }} TWINE_PASSWORD: ${{ secrets.PACKAGE_REGISTRY_TOKEN || secrets.GITHUB_TOKEN }} run: | - uvx twine upload \ + # Gitea's PyPI registry does not support twine's --skip-existing, so + # we run a plain upload and tolerate an "already exists" conflict in + # the shell (dev versions are unique per run, so this only bites a + # main re-run of an already-published release). + set +e + out=$(uvx twine upload \ --repository-url "${{ github.server_url }}/api/packages/${{ github.repository_owner }}/pypi" \ --non-interactive \ - --skip-existing \ - dist/* + --verbose \ + dist/* 2>&1) + code=$? + echo "$out" + if [ $code -ne 0 ] && echo "$out" | grep -qiE "already exist|conflict|409"; then + echo "::notice::Version already published — treating as success." + exit 0 + fi + exit $code