Files
fgl-aircon/.gitea/workflows/publish-pyfglair.yaml
T
petr.polezhaev 24ada01ceb 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-тест
2026-09-29 15:54:55 +03:00

110 lines
4.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сборка и публикация pyfglair в PyPI-реестр пакетов Gitea.
# Запуск: Actions → Publish pyfglair → Run workflow (ручной, workflow_dispatch).
#
# Авторизация (любой из вариантов):
# 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_ (зарезервировано).
#
# Примечания:
# * actions/checkout и actions/setup-python тянутся с github.com
# (если инстанс изолирован — замените на абсолютные URL зеркал);
# * сборка wheel с bundled mbedtls требует доступ к github.com
# (FetchContent); при BUNDLED=0 ставится системный libmbedtls-dev.
name: Publish pyfglair
on:
workflow_dispatch:
inputs:
bundled_mbedtls:
description: "1 — встроить mbedtls, 0 — использовать системный"
required: false
default: "1"
permissions:
contents: read
packages: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Toolchain
run: |
if ! command -v cmake >/dev/null || ! command -v ninja >/dev/null \
|| ! command -v g++ >/dev/null; then
sudo apt-get update
sudo apt-get install -y --no-install-recommends cmake ninja-build g++
fi
if [ "${{ inputs.bundled_mbedtls }}" = "0" ]; then
sudo apt-get update
sudo apt-get install -y --no-install-recommends libmbedtls-dev
fi
cmake --version | head -1
g++ --version | head -1
- name: Build wheel + sdist
env:
BUNDLED: ${{ inputs.bundled_mbedtls }}
run: |
if [ "$BUNDLED" = "0" ]; then
export FGL_BUNDLED_MBEDTLS=0
else
export FGL_BUNDLED_MBEDTLS=1
fi
pip install --upgrade build
python -m build
ls -l dist
# Запускать из каталога без исходников: иначе python подхватывает
# ./pyfglair (без собранного .so) вместо установленного wheel.
- name: Smoke test wheel
run: |
python -m venv /tmp/wheeltest
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:
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::Нет токена: разрешите 'packages: write' (Gitea ≥ 1.27) или задайте секрет PYPI_TOKEN (PAT write:package)"
exit 1
fi
SERVER="${GITHUB_SERVER_URL:-}"
if [ -z "$SERVER" ]; then
SERVER="$(git remote get-url origin | sed -E 's#^git@([^:]+):.*#https://\1#; s#^(https?://[^/]+)/.*#\1#')"
fi
REPO="${GITHUB_REPOSITORY:-$(git remote get-url origin | sed -E 's#.*[:/]([^/]+/[^/]+?)(\.git)?$#\1#')}"
OWNER="${REPO%%/*}"
GITEA_USER="${PYPI_USER:-${GITHUB_ACTOR:-git}}"
pip install --upgrade twine
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/"