From f1b33b9daf2a007bd67735c8892c40dc6bbfa27a Mon Sep 17 00:00:00 2001 From: Denozordec Date: Sun, 5 Apr 2026 17:59:08 +0700 Subject: [PATCH] docs: update README and CI workflow to clarify Gitea Registry login process and improve Docker image build conditions, including handling of secrets and environment variables --- .gitea/README.md | 27 +++++++++++++++++---------- .gitea/workflows/ci.yaml | 29 ++++++++--------------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/.gitea/README.md b/.gitea/README.md index 4677514..d9ece9f 100644 --- a/.gitea/README.md +++ b/.gitea/README.md @@ -16,40 +16,47 @@ Job **openapi** (Redocly) запускается только если в ком ### Секреты репозитория (для push в реестр) +Хост Container Registry в workflow **зашит**: **`git.shts.su`** (`docker/login-action` и теги образов). + В настройках репозитория Gitea: **Settings → Actions → Secrets** (или аналог): | Секрет | Назначение | |--------|------------| -| `GITEA_REGISTRY_HOST` | Хост Docker-реестра (допустимо с `https://` — в workflow схема отрезается). Пример: `git.example.com` или `git.example.com:3000`. Значение попадает в переменную окружения **`REGISTRY`** для `docker/login-action`. | -| `ACTIONS_PAT` | Персональный токен с правом **записи пакетов** (container / package write). Используется как пароль при `docker login`. | +| `ACTIONS_PAT` | (Опционально) PAT с правом **записи пакетов**. Если не задан, для `docker login` используется **`gitea.token`** (нужны права у workflow на пакеты). | Вход в реестр в workflow: -- **registry:** `${{ env.REGISTRY }}` (из шага подготовки); -- **username:** `${{ gitea.actor }}` — пользователь, от имени которого запущен workflow (нативный контекст Gitea Actions); -- **password:** `${{ secrets.ACTIONS_PAT }}`. +- **registry:** `git.shts.su`; +- **username:** `${{ gitea.actor }}`; +- **password:** `${{ secrets.ACTIONS_PAT || gitea.token }}`. -Если **`GITEA_REGISTRY_HOST` не задан** или нет **`ACTIONS_PAT`**, job только **собирает** образы локально (`docker buildx --load`) без push. +### Почему шаг «Log in to Gitea Registry» мог быть skipped + +Раньше в `if:` стояло **`secrets.ACTIONS_PAT != ''`**. В **Gitea act_runner** такая проверка секрета в условии шага часто **всегда ложна**, из‑за этого логин **всегда skipped**. Сейчас условие только `docker_push == 'true'` (всегда при нормальном шаге **Prepare**), пароль: **`secrets.ACTIONS_PAT || gitea.token`**. + +Если после правки `docker login` падает с 401/403 — выдайте job-токену или PAT право **записи в Container Registry** (в настройках Gitea / организации / репозитория, в зависимости от версии). + +Если **`gitea.token`** в выражениях недоступен, в [ci.yaml](workflows/ci.yaml) замените пароль на `${{ secrets.ACTIONS_PAT || github.token }}`. ### Имена образов и теги Формат: ```text -//<имя>:<тег> +git.shts.su//<имя>:<тег> ``` где `<имя>` — одно из: `evobgp-api`, `evobgp-all`, `evobgp-scheduler`, `evobgp-ingest`, `evobgp-render`, `evobgp-deploy`, `evobgp-node`, `evobgp-web`, `evobgp-agent`, `evobgp-bird2`. Теги: `latest`, короткий SHA (7 символов), `sha-<полный_commit_sha>`. -Пример pull (подставьте свой хост и владельца): +Пример pull: ```bash -docker pull git.example.com/myuser/evobgp-api:latest +docker pull git.shts.su/myuser/evobgp-api:latest ``` -Убедитесь, что в **Gitea** включены пакеты (Container Registry) и у токена есть права на создание/обновление образов. Если ваш инстанс требует другой путь имени образа, скорректируйте шаг `Build and push` в [ci.yaml](workflows/ci.yaml) (переменная `IMG`). +Убедитесь, что в **Gitea** включены пакеты (Container Registry) и у токена есть права на создание/обновление образов. Другой хост реестра — правьте **`registry:`** и префикс **`IMG=`** в [ci.yaml](workflows/ci.yaml). ### Примечания diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 527730a..84eece9 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -161,43 +161,30 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Prepare registry (REGISTRY in env + outputs) + - name: Prepare image metadata id: meta - env: - HOST: ${{ secrets.GITEA_REGISTRY_HOST }} run: | set -euo pipefail owner_lc="$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')" echo "owner_lc=$owner_lc" >> "$GITHUB_OUTPUT" short_sha="$(echo '${{ github.sha }}' | cut -c1-7)" echo "short_sha=$short_sha" >> "$GITHUB_OUTPUT" - if [ -z "${HOST:-}" ]; then - echo "GITEA_REGISTRY_HOST not set — build without push." - echo "docker_push=false" >> "$GITHUB_OUTPUT" - echo "REGISTRY=" >> "$GITHUB_ENV" - else - h="$HOST" - h="${h#https://}" - h="${h#http://}" - h="${h%/}" - echo "docker_push=true" >> "$GITHUB_OUTPUT" - echo "REGISTRY=$h" >> "$GITHUB_ENV" - fi + echo "docker_push=true" >> "$GITHUB_OUTPUT" - name: Log in to Gitea Registry - if: steps.meta.outputs.docker_push == 'true' && secrets.ACTIONS_PAT != '' + if: steps.meta.outputs.docker_push == 'true' uses: docker/login-action@v3 with: - registry: ${{ env.REGISTRY }} + registry: git.shts.su username: ${{ gitea.actor }} - password: ${{ secrets.ACTIONS_PAT }} + # PAT репозитория или встроенный токен job (нужны права на пакеты в настройках Actions). + password: ${{ secrets.ACTIONS_PAT || gitea.token }} - name: Build and push ${{ matrix.image }} env: OWNER_LC: ${{ steps.meta.outputs.owner_lc }} SHORT_SHA: ${{ steps.meta.outputs.short_sha }} DO_PUSH: ${{ steps.meta.outputs.docker_push }} - PAT_OK: ${{ secrets.ACTIONS_PAT != '' }} DF: ${{ matrix.dockerfile }} IMAGE: ${{ matrix.image }} BIN: ${{ matrix.bin }} @@ -214,8 +201,8 @@ jobs: BUILD_ARGS+=(--build-arg "INSTALL_BIRDC=${BIRDC:-0}") fi - if [ "$DO_PUSH" = "true" ] && [ -n "${REGISTRY:-}" ] && [ "$PAT_OK" = "true" ]; then - IMG="${REGISTRY}/${OWNER_LC}/${IMAGE}" + if [ "$DO_PUSH" = "true" ]; then + IMG="git.shts.su/${OWNER_LC}/${IMAGE}" docker buildx build \ --platform linux/amd64 \ --file "$DF" \