# Сборка и публикация 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/"