From 3eaa0b74ba175dad795263f76c3ccaab7ba0a133 Mon Sep 17 00:00:00 2001 From: Returner_org Date: Wed, 1 Jul 2026 04:56:36 +0300 Subject: [PATCH] =?UTF-8?q?ci(release):=20workflow=20=D0=BF=D1=83=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=D0=B0=20=D0=BF=D0=BE=20=D1=82=D0=B5=D0=B3=D1=83=20?= =?UTF-8?q?+=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=200.2.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/release.yml | 47 ++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 .gitea/workflows/release.yml diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..f111b90 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,47 @@ +name: Publish elexam-core + +# Публикация пакета в приватный PyPI-реестр Gitea по git-тегу vX.Y.Z. +# Runner: self-hosted host-режим (label elexam-host), образ с python+uv, без docker.sock. +on: + push: + tags: + - 'v*' + +jobs: + publish: + runs-on: elexam-host + steps: + # Node в раннере нет, поэтому checkout делаем вручную через git clone. + # github.token — автоматический токен job'а с доступом на чтение репозитория. + - name: Clone repository at tag + run: | + rm -rf src-checkout + git clone --depth 1 --branch "${{ github.ref_name }}" \ + "https://x-access-token:${{ github.token }}@git.dregomor.ru/${{ github.repository }}.git" \ + src-checkout + + # Защита источника истины: тег обязан совпадать с version в pyproject.toml. + - name: Verify tag matches package version + working-directory: src-checkout + run: | + VER=$(grep -m1 '^version' pyproject.toml | sed -E 's/.*"([^"]+)".*/\1/') + TAG="${{ github.ref_name }}" + echo "pyproject version: $VER | git tag: $TAG" + if [ "v$VER" != "$TAG" ]; then + echo "::error::Тег $TAG не совпадает с версией пакета v$VER — публикация отменена" + exit 1 + fi + + - name: Build (sdist + wheel) + working-directory: src-checkout + run: uv build + + # Токен PKG_PUBLISH_TOKEN (scope write:package) хранится в Actions secrets, + # в логах маскируется. Реестр отклонит повторную заливку уже существующей версии. + - name: Publish to Gitea PyPI + working-directory: src-checkout + run: | + uv publish \ + --publish-url https://git.dregomor.ru/api/packages/Returner_org/pypi \ + -u Returner_org -p "${{ secrets.PKG_PUBLISH_TOKEN }}" \ + dist/* diff --git a/pyproject.toml b/pyproject.toml index 4ceb57e..4d40b26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "elexam-core" -version = "0.2.0" +version = "0.2.1" description = "Общая библиотека платформы Elexam: envelope ответа, trace_id, structlog, каталог ошибок, ULID, http-клиент" readme = "README.md" requires-python = ">=3.14"