From 8a073d96a644ebcd21201ab6631e28143a7f2e84 Mon Sep 17 00:00:00 2001 From: Petr Polezhaev Date: Tue, 29 Sep 2026 16:00:13 +0300 Subject: [PATCH] =?UTF-8?q?ha(ci):=20pre-check=20simple-=D0=B8=D0=BD=D0=B4?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B0=20Gitea=20=D0=B2=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=20--skip-existing=20(twine=207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit twine 7 запрещает --skip-existing для не-PyPI репозиториев (UnsupportedConfiguration); workflow проверяет наличие версии в simple-индексе и пропускает повторную публикацию. --- .gitea/workflows/publish-pyfglair.yaml | 11 ++++++++++- docs/RELEASE_HA.md | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/publish-pyfglair.yaml b/.gitea/workflows/publish-pyfglair.yaml index a652fe1..f3deabb 100644 --- a/.gitea/workflows/publish-pyfglair.yaml +++ b/.gitea/workflows/publish-pyfglair.yaml @@ -99,11 +99,20 @@ jobs: OWNER="${REPO%%/*}" GITEA_USER="${PYPI_USER:-${GITHUB_ACTOR:-git}}" pip install --upgrade twine + + # twine 7 не поддерживает --skip-existing для не-PyPI репозиториев, + # поэтому проверяем simple-индекс Gitea сами. + VERSION="$(basename "$(ls dist/pyfglair-*.tar.gz | head -1)" | sed -E 's/^pyfglair-(.+)\.tar\.gz$/\1/')" + INDEX="$SERVER/api/packages/$OWNER/pypi/simple/pyfglair/" + if curl -fsS -u "$GITEA_USER:$TOKEN" "$INDEX" | grep -q "pyfglair-${VERSION}-"; then + echo "Версия $VERSION уже опубликована — пропуск загрузки." + exit 0 + fi + python -m twine upload \ --repository-url "$SERVER/api/packages/$OWNER/pypi" \ --username "$GITEA_USER" \ --password "$TOKEN" \ - --skip-existing \ --non-interactive \ dist/* echo "Опубликовано: $SERVER/api/packages/$OWNER/pypi/simple/pyfglair/" diff --git a/docs/RELEASE_HA.md b/docs/RELEASE_HA.md index 452502b..870df2d 100644 --- a/docs/RELEASE_HA.md +++ b/docs/RELEASE_HA.md @@ -35,9 +35,10 @@ Workflow: `.gitea/workflows/publish-pyfglair.yaml` (workflow объявляет Workflow собирает `wheel` + `sdist`, прогоняет smoke-тест установки (запускается из `/tmp` с `python -P`, чтобы не подхватить исходники -`pyfglair/` вместо wheel) и публикует через `twine upload --skip-existing`. -Повторная публикация той же версии пропускается; для новой версии поднимите -`version` в `pyproject.toml`. +`pyfglair/` вместо wheel) и публикует через `twine upload`. Twine 7 не +поддерживает `--skip-existing` для не-PyPI репозиториев, поэтому workflow +сам проверяет simple-индекс Gitea и пропускает загрузку, если версия уже +опубликована. Для новой версии поднимите `version` в `pyproject.toml`. ### 1.2. Установка pyfglair в Home Assistant