ha(ci): Gitea Actions — сборка и публикация pyfglair в PyPI-реестр пакетов Gitea

- .gitea/workflows/publish-pyfglair.yaml: ручной workflow_dispatch —
  toolchain, python -m build (wheel+sdist), smoke-тест wheel, twine upload
  в /api/packages/<owner>/pypi (PAT в секрете GITEA_PYPI_TOKEN; встроенный
  GITEA_TOKEN пакеты публиковать не умеет); вход bundled_mbedtls
- setup.py: FGL_BUNDLED_MBEDTLS=0 уважается при сборке wheel (системный
  mbedtls), по умолчанию — встроенный (проверено readelf для обоих)
- RELEASE_HA переписан: §1 внутренняя установка (Gitea Packages + команда
  pip install для HA), §2 PyPI (публично), §3 GitHub/HACS (Custom
  Repositories только на GitHub), §4-5 без изменений
- README компонента: внутренняя установка pyfglair из Gitea Packages
This commit is contained in:
2026-09-29 15:44:56 +03:00
parent 34cdb7fef8
commit a32e2f0bfc
4 changed files with 194 additions and 74 deletions
+95
View File
@@ -0,0 +1,95 @@
# Сборка и публикация 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;
# по умолчанию — актор запуска.
#
# Примечания Gitea Actions:
# * встроенный GITEA_TOKEN не может публиковать пакеты — нужен PAT;
# * 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"
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
- 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"
- name: Publish to Gitea package registry (PyPI)
env:
TOKEN: ${{ secrets.GITEA_PYPI_TOKEN }}
SECRET_USER: ${{ secrets.GITEA_PYPI_USER }}
run: |
if [ -z "$TOKEN" ]; then
echo "::error::Задайте секрет GITEA_PYPI_TOKEN (PAT со scope 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="${SECRET_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/"