twine 7 запрещает --skip-existing для не-PyPI репозиториев
(UnsupportedConfiguration); workflow проверяет наличие версии в
simple-индексе и пропускает повторную публикацию.
- smoke-тест запускается из /tmp с python -P: раньше из корня репозитория
python подхватывал исходники pyfglair/ (без .so) вместо wheel
- permissions: contents: read, packages: write — встроенный GITEA_TOKEN;
PAT (scope write:package) в секрете PYPI_TOKEN остаётся fallback для
старых Gitea; имена секретов без зарезервированного префикса GITEA_
- RELEASE_HA: оба варианта авторизации и пояснение про smoke-тест