ha(ci): fix smoke-теста wheel и токены Gitea

- 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-тест
This commit is contained in:
2026-09-29 15:54:55 +03:00
parent a32e2f0bfc
commit 24ada01ceb
2 changed files with 52 additions and 29 deletions
+28 -14
View File
@@ -1,15 +1,19 @@
# Сборка и публикация pyfglair в PyPI-реестр пакетов Gitea.
# Запуск: Actions → Publish pyfglair → Run workflow (ручной, workflow_dispatch).
#
# Секреты репозитория (Settings → Actions → Secrets):
# GITEA_PYPI_TOKEN — personal access token со scope write:package
# GITEA_PYPI_USER — (опционально) имя пользователя Gitea для upload;
# по умолчанию — актор запуска.
# Авторизация (любой из вариантов):
# 1) встроенный job-токен: permissions: packages: write (Gitea ≥ 1.27 со
# scope packages у features) — секреты не нужны;
# 2) personal access token (scope write:package) в секрете PYPI_TOKEN —
# для старых Gitea, где публикация пакетов job-токеном не реализована
# (см. https://docs.gitea.com/usage/actions/comparison — "Package
# repository authorization").
# Секрет PYPI_USER (опционально) — имя пользователя к PAT; по умолчанию актор.
# ВНИМАНИЕ: имена секретов не могут начинаться с GITEA_ (зарезервировано).
#
# Примечания Gitea Actions:
# * встроенный GITEA_TOKEN не может публиковать пакеты — нужен PAT;
# Примечания:
# * actions/checkout и actions/setup-python тянутся с github.com
# (если инстанс изолирован — замените на абсолютные URL своих зеркал);
# (если инстанс изолирован — замените на абсолютные URL зеркал);
# * сборка wheel с bundled mbedtls требует доступ к github.com
# (FetchContent); при BUNDLED=0 ставится системный libmbedtls-dev.
name: Publish pyfglair
@@ -22,6 +26,10 @@ on:
required: false
default: "1"
permissions:
contents: read
packages: write
jobs:
publish:
runs-on: ubuntu-latest
@@ -61,20 +69,26 @@ jobs:
python -m build
ls -l dist
# Запускать из каталога без исходников: иначе python подхватывает
# ./pyfglair (без собранного .so) вместо установленного wheel.
- name: Smoke test wheel
run: |
python -m venv /tmp/wheeltest
/tmp/wheeltest/bin/pip install --quiet dist/*.whl
/tmp/wheeltest/bin/python -c "import pyfglair.session as s; print('pyfglair:', s.__file__)"
/tmp/wheeltest/bin/python -c "from pyfglair import Template, Prop, convert_to_display; assert convert_to_display(Template.A, Prop.DISPLAY_TEMPERATURE, 7000) == 200"
WHEEL="$(pwd)/dist"
/tmp/wheeltest/bin/pip install --quiet "$WHEEL"/*.whl
cd /tmp
/tmp/wheeltest/bin/python -P -c "import pyfglair.session as s; print('pyfglair:', s.__file__)"
/tmp/wheeltest/bin/python -P -c "from pyfglair import Template, Prop, convert_to_display; assert convert_to_display(Template.A, Prop.DISPLAY_TEMPERATURE, 7000) == 200"
- name: Publish to Gitea package registry (PyPI)
env:
TOKEN: ${{ secrets.GITEA_PYPI_TOKEN }}
SECRET_USER: ${{ secrets.GITEA_PYPI_USER }}
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
PYPI_USER: ${{ secrets.PYPI_USER }}
JOB_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
TOKEN="${PYPI_TOKEN:-$JOB_TOKEN}"
if [ -z "$TOKEN" ]; then
echo "::error::Задайте секрет GITEA_PYPI_TOKEN (PAT со scope write:package)"
echo "::error::Нет токена: разрешите 'packages: write' (Gitea ≥ 1.27) или задайте секрет PYPI_TOKEN (PAT write:package)"
exit 1
fi
SERVER="${GITHUB_SERVER_URL:-}"
@@ -83,7 +97,7 @@ jobs:
fi
REPO="${GITHUB_REPOSITORY:-$(git remote get-url origin | sed -E 's#.*[:/]([^/]+/[^/]+?)(\.git)?$#\1#')}"
OWNER="${REPO%%/*}"
GITEA_USER="${SECRET_USER:-${GITHUB_ACTOR:-git}}"
GITEA_USER="${PYPI_USER:-${GITHUB_ACTOR:-git}}"
pip install --upgrade twine
python -m twine upload \
--repository-url "$SERVER/api/packages/$OWNER/pypi" \