From df08cbc121cd2f364027dde281bf3b1c728ae9e0 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Wed, 28 Oct 2026 17:22:03 +0700 Subject: [PATCH] =?UTF-8?q?CI:=20=D1=82=D0=BE=D0=BA=D0=B5=D0=BD=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D1=81=D1=82=D1=80=D0=B0=20=D0=B8=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=B8=D0=B7=20=D1=81=D0=B5?= =?UTF-8?q?=D0=BA=D1=80=D0=B5=D1=82=D0=B0=20ACTION=5FPAT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .gitea/workflows/docker.yml | 13 +++++++------ docs/docker.md | 7 +++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 28241f7..ed3e05a 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -4,10 +4,10 @@ # Нужно один раз настроить (подробно — docs/docker.md, раздел «CI/CD в Gitea»): # * включить Actions в репозитории и зарегистрировать act_runner с доступом к Docker; # * Secrets репозитория: -# REGISTRY_USER пользователь Gitea -# REGISTRY_TOKEN токен с правами write:package +# ACTION_PAT токен Gitea (права write:package и read:package): им образ публикуется в реестр +# и скачиваются модели (Secret; Variable с тем же именем тоже подойдёт) +# REGISTRY_USER (необязательно) владелец токена; по умолчанию владелец репозитория # MODELS_URL (необязательно) ссылка на models-bundle.tar.gz; без неё образ собирается без моделей -# MODELS_TOKEN (необязательно) токен для скачивания по MODELS_URL name: docker on: @@ -33,7 +33,7 @@ jobs: - name: Модели (docker-models/models) env: MODELS_URL: ${{ secrets.MODELS_URL }} - MODELS_TOKEN: ${{ secrets.MODELS_TOKEN }} + MODELS_TOKEN: ${{ secrets.ACTION_PAT || vars.ACTION_PAT }} run: | if [ -n "$MODELS_URL" ]; then echo "скачиваю модели" @@ -89,9 +89,10 @@ jobs: - name: Публикация в реестр Gitea env: - REGISTRY_USER: ${{ secrets.REGISTRY_USER }} - REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} + REGISTRY_USER: ${{ secrets.REGISTRY_USER || github.repository_owner }} + REGISTRY_TOKEN: ${{ secrets.ACTION_PAT || vars.ACTION_PAT }} run: | set -e + test -n "$REGISTRY_TOKEN" || { echo "не задан ACTION_PAT (Settings → Actions → Secrets)"; exit 1; } echo "$REGISTRY_TOKEN" | docker login "${{ steps.meta.outputs.registry }}" -u "$REGISTRY_USER" --password-stdin for t in ${{ steps.meta.outputs.tags }}; do docker push "$t"; done diff --git a/docs/docker.md b/docs/docker.md index 63c62c9..22620ca 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -199,10 +199,9 @@ Workflow `.gitea/workflows/docker.yml` собирает образ и публи | Секрет | Значение | |---|---| - | `REGISTRY_USER` | пользователь Gitea, под которым публикуется образ | - | `REGISTRY_TOKEN` | токен этого пользователя с правами `write:package` (и `read:package`) | + | `ACTION_PAT` | токен Gitea (Settings → Applications → Access Tokens) с правами `write:package` и `read:package`; им образ публикуется в реестр и скачиваются модели. Имена секретов не могут начинаться с `GITEA_` и `GITHUB_`, поэтому не `GITEA_TOKEN` | + | `REGISTRY_USER` | необязательно: владелец токена; по умолчанию — владелец репозитория (`denozord`) | | `MODELS_URL` | необязательно: ссылка на `models-bundle.tar.gz`; нет — образ без моделей | - | `MODELS_TOKEN` | необязательно: токен с `read:package` для скачивания по `MODELS_URL` | 3. Реестр контейнеров Gitea доступен по HTTPS. Если Gitea по HTTP, добавьте её адрес в `insecure-registries` Docker на раннере и на VPS (`/etc/docker/daemon.json`). @@ -261,7 +260,7 @@ Workflow `.gitea/workflows/docker.yml` собирает образ и публи | 401 | не передан токен или он отличается от `DUB_API_TOKEN` | | Контейнер `unhealthy` в первые минуты | модель ещё грузится; `docker logs dub-ai`. Если не проходит — не хватает памяти (`docker stats`) | | CI: `Cannot connect to the Docker daemon` | у раннера нет доступа к Docker (см. «Что настроить один раз») | -| CI: `unauthorized` при push | у `REGISTRY_TOKEN` нет `write:package` или `REGISTRY_USER` не владелец/участник пространства имён репозитория | +| CI: `unauthorized` при push | у `ACTION_PAT` нет `write:package` или токен принадлежит не владельцу/участник пространства имён репозитория | | CI: образ без моделей, хотя ждали с ними | секрет `MODELS_URL` пуст или шаг скачивания пропущен — смотрите лог шага «Модели» | ## Что проверено, а что нет