Files
fgl-aircon/scripts/publish-gitea-pypi.sh
T
petr.polezhaev f9d917c66d ha(packaging): musllinux-wheel для HA OS и статический C++-рантайм
- _corebuild.musl_platform_tag(): на musl (Alpine/HA OS) bdist_wheel
  выпускает py3-none-musllinux_X_Y_<arch> вместо linux_<arch> — иначе pip
  ставит glibc-сборку и dlopen падает на ld-linux-x86-64.so.2
- shared-библиотека линкуется со -static-libstdc++ -static-libgcc (gcc):
  NEEDED только libm/libc (проверено readelf), меньше зависимостей у HA OS
- Gitea Actions: job build-musllinux (container python:3.12-alpine) собирает
  и публикует musl-wheel; build-glibc — как раньше; общий
  scripts/publish-gitea-pypi.sh с пропуском уже загруженных файлов
- тесты musl_platform_tag; RELEASE_HA §1.1-1.4 (выбор wheel, переустановка
  на HA OS, ручная сборка musllinux без container:); README troubleshooting
2026-09-29 16:20:21 +03:00

58 lines
2.2 KiB
Bash
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.
#!/usr/bin/env bash
# Публикация файлов из DIST_DIR в PyPI-реестр пакетов Gitea.
# Уже загруженные (по имени файла в simple-индексе) пропускаются: twine 7 не
# поддерживает --skip-existing для не-PyPI репозиториев.
#
# Переменные:
# TOKEN (или GITEA_JOB_TOKEN) — обязательный токен (PAT write:package или
# встроенный job-токен при packages: write)
# DIST_DIR — каталог с *.whl/*.tar.gz (по умолчанию dist)
# SERVER, OWNER — Gitea и владелец; если не заданы, берутся
# из git remote (origin)
# PYPI_USER — имя пользователя (по умолчанию актор)
set -euo pipefail
DIST_DIR="${DIST_DIR:-dist}"
TOKEN="${TOKEN:-${GITEA_JOB_TOKEN:-}}"
if [ -z "${SERVER:-}" ]; then
SERVER="$(git remote get-url origin \
| sed -E 's#^git@([^:]+):.*#https://\1#; s#^(https?://[^/]+)/.*#\1#')"
fi
if [ -z "${OWNER:-}" ]; then
REPO="${GITHUB_REPOSITORY:-$(git remote get-url origin \
| sed -E 's#.*[:/]([^/]+/[^/]+?)(\.git)?$#\1#')}"
OWNER="${REPO%%/*}"
fi
USER_NAME="${PYPI_USER:-${GITHUB_ACTOR:-git}}"
if [ -z "$TOKEN" ]; then
echo "нет токена: задайте секрет PYPI_TOKEN (PAT write:package) или" >&2
echo "разрешите 'packages: write' для встроенного GITEA_TOKEN" >&2
exit 1
fi
if [ ! -d "$DIST_DIR" ]; then
echo "нет каталога $DIST_DIR" >&2
exit 1
fi
INDEX="$SERVER/api/packages/$OWNER/pypi/simple/pyfglair/"
pip install --upgrade --quiet twine
for FILE in "$DIST_DIR"/*; do
NAME="$(basename "$FILE")"
if curl -fsS -u "$USER_NAME:$TOKEN" "$INDEX" 2>/dev/null \
| grep -qF "$NAME"; then
echo "уже опубликовано: $NAME"
continue
fi
python -m twine upload \
--repository-url "$SERVER/api/packages/$OWNER/pypi" \
--username "$USER_NAME" \
--password "$TOKEN" \
--non-interactive \
"$FILE"
echo "опубликовано: $NAME"
done
echo "индекс: $INDEX"