- .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
96 lines
3.9 KiB
YAML
96 lines
3.9 KiB
YAML
# Сборка и публикация 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/"
|